Compartilhar via


Como: Distorcer cores

Distorção aumenta ou diminui um componente de cor em uma quantidade proporcional para outro componente de cor.Por exemplo, considere a transformação onde o componente vermelho é aumentado pela metade do valor do componente azul.Em transformação, a cor (0,2, 0,5, 1) seria (0,7, 0,5, 1).O novo componente vermelho é 0,2 + (1/2)(1) = 0,7.

Exemplo

O exemplo seguinte constrói um Image objeto do arquivo ColorBars4.bmp. Em seguida, o código aplica a transformação de distorção descrita no parágrafo anterior a cada pixel na imagem.

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

A tabela a seguir lista os vetores de cor para as quatro barras antes e após a transformação de distorção.

Original

Distorcido

(0, 0, 1, 1)

(0.5, 0, 1, 1)

(0.5, 1, 0.5, 1)

(0.75, 1, 0.5, 1)

(1, 1, 0, 1)

(1, 1, 0, 1)

(0.4, 0.4, 0.4, 1)

(0.6, 0.4, 0.4, 1)

Dim image = New Bitmap("ColorBars.bmp")
Dim imageAttributes As New ImageAttributes()
Dim width As Integer = image.Width
Dim height As Integer = image.Height

Dim colorMatrixElements As Single()() = _
    {New Single() {1, 0, 0, 0, 0}, _
        New Single() {0, 1, 0, 0, 0}, _
        New Single() {0.5F, 0, 1, 0, 0}, _
        New Single() {0, 0, 0, 1, 0}, _
        New Single() {0, 0, 0, 0, 1}}

Dim colorMatrix As New ColorMatrix(colorMatrixElements)

imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, _
    ColorAdjustType.Bitmap)

e.Graphics.DrawImage(image, 10, 10, width, height)

e.Graphics.DrawImage(image, New Rectangle(150, 10, width, height), 0, 0, _
    width, height, GraphicsUnit.Pixel, imageAttributes)
Image image = new Bitmap("ColorBars.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;

float[][] colorMatrixElements = { 
        new float[] {1,  0,  0,  0, 0},
        new float[] {0,  1,  0,  0, 0},
        new float[] {0.5f,  0,  1,  0, 0},
        new float[] {0,  0,  0,  1, 0},
        new float[] {0, 0, 0, 0, 1}};

ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);

imageAttributes.SetColorMatrix(
   colorMatrix,
   ColorMatrixFlag.Default,
   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.Substituir ColorBars.bmp com um nome de imagem e o caminho válido no seu sistema.

Consulte também

Referência

ColorMatrix

ImageAttributes

Outros recursos

Elementos gráficos e desenho em formulários do Windows

Recolorir imagens