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.

Abbildung, die zwei Versionen eines mehrfarbigen Bilds zeigt; Der rote Bereich in der ersten Version ist in der zweiten Version blau.