Como: Usar uma tabela de remapeamento de cores
Remapeamento é o processo de conversão de 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 objeto da matriz tem um OldColor propriedade e um NewColor propriedade.
Quando GDI+ Desenha uma imagem, cada pixel da imagem é comparado com a matriz de cores antigas. Se uma cor antiga corresponder a cor do pixel, sua cor é alterada para a nova cor correspondente.As cores são alteradas apenas para renderização — os valores de cor de imagem em si (armazenado 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 o SetRemapTable método de um ImageAttributes objeto e, em seguida, passar o ImageAttributes objeto para o DrawImage método de um Graphics objeto.
Exemplo
O exemplo a seguir cria um Image objeto do arquivo RemapInput.bmp. O código cria uma tabela de remapeamento de cores consiste em um único ColorMap objeto. The OldColor propriedade das ColorRemap objeto é vermelho e o NewColor propriedade fica azul. A imagem é desenhada uma vez sem remapeamento e uma vez com o remapeamento.O processo 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
The preceding example is designed for use with Windows Forms, and it requires PaintEventArgse, which is a parameter of the Paint event handler.