2011-01-11 25 views
1

Ich habe eine Bitmap, die ich erstellt habe, indem ich die gleiche Grafik mehrfach kacheln. Wenn die Bitmap erstellt wird, färbt sie die Kacheln anhand bestimmter Kriterien.C# winforms GDI +

Wenn das Bitmap geladen ist, möchte ich dem Benutzer dann die Optionen zum Ändern der Kachelfarben basierend auf weiteren vordefinierten Kriterien geben. Muss ich daher die aktuelle Bitmap verwerfen, neu mit den neuen Farben generieren und an das Panel anhängen. Oder kann ich die Bitmap für jede Kachel durchlaufen und die Farben auf diese Weise ändern?

Danke.

Antwort

1

Es hängt davon ab, wie oft der Benutzer die Fliesenfarben ändern wird. Wenn sie es nicht zu oft machen, ist es wahrscheinlich einfacher, eine neue Bitmap zu erstellen (hauptsächlich, weil Ihr Code für dieses Szenario optimiert zu sein scheint).

Eine bessere performante Möglichkeit besteht jedoch darin, die Bitmap.LockBits/UnlockBits-Methoden zu verwenden, um die Pixeldaten in der Bitmap abzurufen und dann die Pixeldaten direkt zu bearbeiten. Informationen dazu finden Sie in der MSDN-Dokumentation zur Bitmap.LockBits-Methode (http://msdn.microsoft.com/de-de/library/5ey6h79d.aspx).

+0

http://www.bobpowell.net/lockingbits.htm ist auch einen Blick wert, wenn Sie stattdessen "unsicheren" Code verwenden möchten (es wird ein bisschen schneller). – Josh

+0

Ja, es gibt Möglichkeiten, die Leistung einer Pixel-für-Pixel-Operation auf einer Bitmap zu verbessern. Aber es gibt keinen Grund zu der Annahme, dass das schneller sein wird, als einfach die Bitmap zu regenerieren. –

+0

Ich würde sagen, dass hängt davon ab, wie viel Speicherdruck der GC unter ist und wie viel des Bildes geändert werden muss. Wenn nur ein paar Stellen im Bild geändert werden müssen, ist es wahrscheinlich besser, die Pixeldaten zu ändern. Wenn die Änderung den größten Teil des Bildinhalts ändert, ist es wahrscheinlich, dass die Neugenerierung der Bitmap schneller ist. – Josh

1

Soweit ich weiß, ist die einzige Möglichkeit, die Bitmap zu durchlaufen und die Farben zu ändern, Pixel für Pixel, also denke ich, dass es am besten ist, die Bitmap neu zu erstellen, wenn der Benutzer neue Farben auswählt.

+1

Das ist richtig. Eine Bitmap ist ein räumlich zugeordnetes Pixelfeld. Es hat kein Konzept der "Kacheln", die Sie dem Bild hinzugefügt haben. Färben Sie die Pixel in einer einzelnen Kachel neu und erstellen Sie dann die Grafik mit mehreren Kacheln erneut. Stellen Sie sicher, dass Sie die vorherige Bitmap entsorgen, wenn Sie sie nicht mehr benötigen. –