Compartilhar via


Uso de uma tabela de remapeamento de cores

Remapeamento é o processo de conversão de cores em uma imagem seguindo uma tabela de remapeamento de cores. A tabela de remapeamento de cores é uma matriz de estruturas ColorMap . Cada estrutura ColorMap na matriz tem um membro oldColor e um membro newColor .

Quando GDI+ desenha uma imagem, cada pixel da imagem é comparado com a matriz de cores antigas. Se a cor do pixel corresponde a uma cor anterior, sua cor é alterada para a nova cor correspondente. As cores são alteradas apenas para renderização — os valores de cor da própria imagem (armazenados em um objeto Image ou Bitmap ) não são alterados.

Para desenhar uma imagem remapeada, inicialize uma matriz de estruturas ColorMap . Passe o endereço dessa matriz para o método ImageAttributes::SetRemapTable de um objeto ImageAttributes e passe o endereço do objeto ImageAttributes para o método DrawImage Methods de um objeto Graphics .

O exemplo a seguir cria um objeto Image do arquivo RemapInput.bmp. O código cria uma tabela de remapeamento de cores que consiste em uma única estrutura ColorMap . O membro oldColor da estrutura ColorMap é vermelho e o membro newColor é azul. A imagem é desenhada uma vez sem remapeamento e uma vez com remapeamento. O processo de remapeamento transforma todos os pixels vermelhos em azul.

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);

A ilustração a seguir mostra a imagem original à esquerda e a imagem remapeada à direita.

ilustração mostrando duas versões de uma imagem multicolorida; a região vermelha na primeira versão é azul na segunda versão