Como: Usar uma tabela de remapeamento de cor
Remapeamento é o processo de converter as cores em uma imagem de acordo com uma tabela de remapeamento de cores. A tabela de remapeamento de cores é uma matriz de ColorMap objetos. Cada ColorMap o objeto na matriz tem um OldColor propriedade e um NewColor propriedade.
Quando GDI+ desenha uma imagem, cada pixel da imagem é comparado à matriz de cores antigas. Se uma cor de pixels coincidir com uma cor antiga, sua cor é alterada para a nova cor correspondente. As cores são alteradas apenas para processamento — os valores de cor da própria imagem (armazenados em um Image ou Bitmap objeto) não são alteradas.
Para desenhar uma imagem remapeada, inicializar uma matriz de ColorMap objetos. Passar essa matriz para a SetRemapTable método de um ImageAttributes object e, em seguida, passar o ImageAttributes o objeto para o DrawImage método de um Graphics objeto.
Exemplo
O exemplo a seguir cria um Image o objeto do arquivo RemapInput.bmp. O código cria uma tabela de remapeamento de cores consiste em um único ColorMap objeto. O OldColor propriedade da ColorRemap objeto é vermelho e o NewColor propriedade é azul. A imagem é desenhada once sem remapeamento e uma vez com o remapeamento. O processo de remapping altera todos os pixels vermelhos para azul.
A ilustração a seguir mostra a imagem original, à esquerda e a imagem remapeada à direita.
Dim image As New Bitmap("RemapInput.bmp")
Dim imageAttributes As New ImageAttributes()
Dim width As Integer = image.Width
Dim height As Integer = image.Height
Dim colorMap As New ColorMap()
colorMap.OldColor = Color.FromArgb(255, 255, 0, 0) ' opaque red
colorMap.NewColor = Color.FromArgb(255, 0, 0, 255) ' opaque blue
Dim remapTable As ColorMap() = {colorMap}
imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap)
e.Graphics.DrawImage(image, 10, 10, width, height)
' Pass in the destination rectangle (2nd argument), the upper-left corner
' (3rd and 4th arguments), width (5th argument), and height (6th
' argument) of the source rectangle.
e.Graphics.DrawImage( _
image, _
New Rectangle(150, 10, width, height), _
0, 0, _
width, _
height, _
GraphicsUnit.Pixel, _
imageAttributes)
Image image = new Bitmap("RemapInput.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;
ColorMap colorMap = new ColorMap();
colorMap.OldColor = Color.FromArgb(255, 255, 0, 0); // opaque red
colorMap.NewColor = Color.FromArgb(255, 0, 0, 255); // opaque blue
ColorMap[] remapTable = { colorMap };
imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);
e.Graphics.DrawImage(image, 10, 10, width, height);
e.Graphics.DrawImage(
image,
new Rectangle(150, 10, width, height), // destination rectangle
0, 0, // upper-left corner of source rectangle
width, // width of source rectangle
height, // height of source rectangle
GraphicsUnit.Pixel,
imageAttributes);
Compilando o código
O exemplo anterior é projetado para uso com o Windows Forms e requer PaintEventArgs e, que é um parâmetro da Paint manipulador de eventos.