Partilhar via


Usando transformações para cores de escala

Uma transformação de escala multiplica um ou mais dos componentes por um número de quatro cores. As entradas de matriz de cores que representam a escala são fornecidas na tabela a seguir.

Componente a ser dimensionado.

Entrada de matriz

Vermelho

[0][0]

Verde

[1][1]

Azul

[2][2]

Alpha

[3][3]

Uma cor de escala

O exemplo seguinte constrói uma Image o objeto do arquivo ColorBars2.bmp. Em seguida, o código dimensiona o componente azul de cada pixel na imagem, por um fator de 2. A imagem original é desenhada juntamente com a imagem transformada.

        Dim image As New Bitmap("ColorBars2.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, 0, 2, 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)

        ' 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("ColorBars2.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,  0,  2,  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);

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

Dimensionar cores

A tabela a seguir lista os vetores de cor para as quatro barras antes e após o dimensionamento azul. Observe que o componente azul na barra de cores quarto saiu de 0,8 0,6. Isso ocorre porque GDI+ mantém apenas a parte fracionária do resultado. Por exemplo, (2)(0.8) = 1,6, e a parte fracionária de 1.6 é 0,6. Somente a parte fracionária de retenção garante que o resultado é sempre no intervalo [0, 1].

Original

Dimensionado

(0.4, 0.4, 0.4, 1)

(0.4, 0.4, 0.8, 1)

(0.4, 0.2, 0.2, 1)

(0.4, 0.2, 0.4, 1)

(0.2, 0.4, 0.2, 1)

(0.2, 0.4, 0.4, 1)

(0.4, 0.4, 0.8, 1)

(0.4, 0.4, 0.6, 1)

Várias cores de escala

O exemplo seguinte constrói uma Image o objeto do arquivo ColorBars2.bmp. Em seguida, o código dimensiona os componentes vermelhos, verdes e azuis de cada pixel na imagem. Os componentes vermelhos são dimensionados 25 por cento, os componentes em verdes são dimensionados 35 por cento e os componentes em azuis são dimensionados 50 por cento.

        Dim image As 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() {0.75F, 0, 0, 0, 0}, _
           New Single() {0, 0.65F, 0, 0, 0}, _
           New Single() {0, 0, 0.5F, 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)

        ' Pass in the destination rectangle, and the upper-left corner, width, 
        ' and height of the source rectangle as in the previous example.
        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[] {.75F,  0,  0,  0, 0},
   new float[] {0,  .65F,  0,  0, 0},
   new float[] {0,  0,  .5F,  0, 0},
   new float[] {0,  0,  0,  1F, 0},
   new float[] {0, 0, 0, 0, 1F}};

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

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

Dimensionar cores

A tabela a seguir lista os vetores de cor para as quatro barras antes e após o dimensionamento vermelho, verde e azul.

Original

Dimensionado

(0.6, 0.6, 0.6, 1)

(0.45, 0.39, 0.3, 1)

(0, 1, 1, 1)

(0, 0.65, 0.5, 1)

(1, 1, 0, 1)

(0.75, 0.65, 0, 1)

(1, 0, 1, 1)

(0.75, 0, 0.5, 1)

Consulte também

Referência

ColorMatrix

ImageAttributes

Outros recursos

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

Recolorir imagens