wp_xyz hat geschrieben:Dazu musst du das Bitmap Pixel für Pixel durchlaufen, prüfen ob das aktuelle Pixel die betreffende Farbe hat und, wenn ja, durch die neue Farbe ersetzen. Eine Möglichkeit dafür wäre folgendes:
- Code: Alles auswählen
for i:=0 to intfimg.Width-1 do
for j := 0 to intfimg.Height - 1 do
if intfimg.Colors[i, j] = clr then
intfimg.Colors[i, j] := newclr;
Danke für die Antwort.
Ich habe es jetzt so gelöst, dass vor der Laufzeit alle Pixel durchgegangen werden, und für jede vorkommende Farbe für jeweils alle zusammenhängenden Flächen eine X/Y-Position gespeichert wird. Zur Laufzeit übermale ich dann nicht alle Pixel einzeln, sondern jeweils einen zusammenhängenden Bereich mit Canvas.Floodfill.
Frage: Macht es eigentlich zeitlich irgendeinen Unterschied Pixel einzeln umzufärben oder mit Floodfill?
Bei meinem jetzigen Programm gibt es zwar bislang keine Zeitprobleme beim Zeichnen, aber bei einem anderen Programm bin ich zuletzt an gewisse Grenzen gestoßen. Da konnte ich nur eine begrenzte Anzahl Polygone übereinander auf eine Bitmap zeichnen ohne dass es zu Verzögerungen bei der Ausgabe kam, die alle 40 Millisekunden vorgehen war. Dazu noch eine Frage: Kann man wenn man TLazIntfImage benutzt mehr Polygone ohne merkliche Zeitverzögerungen zeichnen als mit TBitmap?