Partilhar via


Como: Distorcer cores

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

Exemplo

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

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

Distorcer cores

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

Original

Deformado

(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

O exemplo anterior é projetado para uso com o Windows Forms e requer PaintEventArgs e, que é um parâmetro da Paint manipulador de eventos. Substitua ColorBars.bmp com um nome de imagem e um caminho válido no sistema.

Consulte também

Referência

ColorMatrix

ImageAttributes

Outros recursos

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

Recolorir imagens