Benutzer mit den meisten Antworten
Fehler bei Anwendung von DrawString auf Image?

Frage
-
Hallo zusammen,
ich habe die folgende Funktion in Arbeit:''' <summary> ''' Erstellen einer ImageList aus einer Grund-Bitmap mit Nummerierung ''' </summary> ''' <param name="theBasicBMP">die Grund-Grafik</param> ''' <param name="begNr">die Beginn-Nummer</param> ''' <param name="endNr">die End-Nummer</param> ''' <param name="theNrFont">die Schriftart der Nummern</param> ''' <param name="theNrcolor">die Farbe der Nummern</param> ''' <returns>eine Imagelist</returns> Public Function CreateNumberedImageList(theBasicBMP As Bitmap, begNr As Short, endNr As Short, theNrFont As Font, theNrcolor As Color) As ImageList Dim il As New ImageList, pb As PictureBox, tRect As Rectangle Dim sf As New StringFormat, gr As Graphics sf.LineAlignment = StringAlignment.Center 'Ausrichtung des Texts sf.Alignment = StringAlignment.Center With il .ImageSize = New Size(theBasicBMP.Size) .ColorDepth = ColorDepth.Depth32Bit tRect = New Rectangle(New Point(0, 0), .ImageSize) 'Rechteck des Texts festlegen pb = New PictureBox pb.Image = theBasicBMP gr = Graphics.FromImage(pb.Image) gr.TextRenderingHint = TextRenderingHint.ClearTypeGridFit For i As Short = begNr To endNr gr.DrawString(i, theNrFont, New SolidBrush(theNrcolor), tRect, sf) .Images.Add(i, pb.Image) Next pb.Dispose() End With Return il End Function
Der Code erklärt sich eigentlich von selbst...
Was nicht funktioniert ist, dass in der For-Schleife zwar der Text (in diesem Falle immer der Wert von i als Nummer) auf Image geschrieben wird. Beim nächsten i soll ein neues Image mit der nächsten Nummer beschrieben werden. Allerdings funktioniert das nicht. Wenn ich bspw. für begNr = 1 bis EndNr = 5 sozusagen 5 Images erzeugen will, die entsprechend mi 1 ... 5 nummeriert sind, läuft die Funktion zwar durch, 5 Images werden in der ImageList gespeichert, aber alle sehen bspw. so aus:
Alle Nummern 1-5 sind auf allen 5 Images übereinander geschrieben.Was läuft da falsch?
Grüße-
Dietrich
- Bearbeitet dherrmann Samstag, 30. September 2017 15:15
Antworten
-
Hey,
wenn du immer auf ein neues Bild zeichnen willst, kannst du das Originalbild vorher clonen. Mit deinem Code zeichnest du ja immer auf das referenzgleiche Bild.
For i As Short = begNr To endNr image = CType(pb.Image.Clone(), Image) gr = Graphics.FromImage(image)
Beste Grüße
Vergiss nicht, die Antwort auf deine Frage zu markieren und hilfreiche Beiträge zu bewerten, damit auch andere schnell die Lösung für ihr Problem finden können - und wir nebenbei noch ein paar Punkte verdienen. :)
- Als Antwort markiert dherrmann Sonntag, 1. Oktober 2017 07:41
Alle Antworten
-
Hey,
wenn du immer auf ein neues Bild zeichnen willst, kannst du das Originalbild vorher clonen. Mit deinem Code zeichnest du ja immer auf das referenzgleiche Bild.
For i As Short = begNr To endNr image = CType(pb.Image.Clone(), Image) gr = Graphics.FromImage(image)
Beste Grüße
Vergiss nicht, die Antwort auf deine Frage zu markieren und hilfreiche Beiträge zu bewerten, damit auch andere schnell die Lösung für ihr Problem finden können - und wir nebenbei noch ein paar Punkte verdienen. :)
- Als Antwort markiert dherrmann Sonntag, 1. Oktober 2017 07:41