Verwenden von Farbneuzuordnungstabellen
Neuzuordnung ist der Prozess, bei dem die Farben in einem Bild entsprechend einer Neuzuordnungstabelle konvertiert werden. Die Neuzuordnungstabelle für Farben ist ein Array von ColorMap-Strukturen. Jede ColorMap-Struktur im Array verfügt über einen oldColor-Member und einen newColor-Member.
Wenn GDI+ ein Bild zeichnet, wird jedes Pixel des Bilds mit dem Array alter Farben verglichen. Wenn die Farbe eines Pixels mit einer alten Farbe übereinstimmt, wird seine Farbe in die entsprechende neue Farbe geändert. Die Farben werden nur zum Rendern geändert. Die Farbwerte des Bilds selbst (in einem Bild- oder Bitmapobjekt gespeichert) werden nicht geändert.
Initialisieren Sie ein Array von ColorMap-Strukturen, um ein neu zugeordnetes Bild zu zeichnen. Übergeben Sie die Adresse dieses Arrays an die ImageAttributes::SetRemapTable-Methode eines ImageAttributes-Objekts, und übergeben Sie dann die Adresse des ImageAttributes-Objekts an die DrawImage Methods-Methode eines Graphics-Objekts.
Im folgenden Beispiel wird ein Image-Objekt aus der Datei RemapInput.bmp erstellt. Der Code erstellt eine Farbzuordnungstabelle, die aus einer einzelnen ColorMap-Struktur besteht. Das oldColor-Element der ColorMap-Struktur ist rot, und das newColor-Element ist blau. Das Bild wird einmal ohne Neuzuordnung und einmal mit Neuzuordnung gezeichnet. Beim Neuzuordnungsprozess werden alle roten Pixel in Blau geändert.
Image image(L"RemapInput.bmp");
ImageAttributes imageAttributes;
UINT width = image.GetWidth();
UINT height = image.GetHeight();
ColorMap colorMap[1];
colorMap[0].oldColor = Color(255, 255, 0, 0); // opaque red
colorMap[0].newColor = Color(255, 0, 0, 255); // opaque blue
imageAttributes.SetRemapTable(1, colorMap, ColorAdjustTypeBitmap);
graphics.DrawImage(&image, 10, 10, width, height);
graphics.DrawImage(
&image,
Rect(150, 10, width, height), // destination rectangle
0, 0, // upper-left corner of source rectangle
width, // width of source rectangle
height, // height of source rectangle
UnitPixel,
&imageAttributes);
Die folgende Abbildung zeigt das ursprüngliche Bild links und das neu zugeordnete Bild auf der rechten Seite.
