Compartilhar via


Uso de uma matriz de cores para definir valores alfa em imagens

A classe Bitmap (que herda da classe Image ) e a classe ImageAttributes fornecem funcionalidade para obter e definir valores de pixel. Você pode usar a classe ImageAttributes para modificar os valores alfa de uma imagem inteira ou pode chamar o método Bitmap::SetPixel da classe Bitmap para modificar valores de pixel individuais. Para obter mais informações sobre como definir valores de pixel individuais, consulte Definindo os valores alfa de pixels individuais.

O exemplo a seguir desenha uma linha preta larga e exibe uma imagem opaca que cobre parte dessa linha.

Bitmap bitmap(L"Texture1.jpg");
Pen pen(Color(255, 0, 0, 0), 25);
// First draw a wide black line.
graphics.DrawLine(&pen, Point(10, 35), Point(200, 35));
// Now draw an image that covers part of the black line.
graphics.DrawImage(&bitmap,
   Rect(30, 0, bitmap.GetWidth(), bitmap.GetHeight()));

A ilustração a seguir mostra a imagem resultante, que é desenhada em (30, 0). Observe que a linha preta larga não aparece por meio da imagem.

ilustração mostrando uma imagem opaca sobrepondo um retângulo fino, largo e preto

A classe ImageAttributes tem muitas propriedades que você pode usar para modificar imagens durante a renderização. No exemplo a seguir, um objeto ImageAttributes é usado para definir todos os valores alfa como 80% do que eram. Isso é feito inicializando uma matriz de cores e configurando o valor de escala alfa na matriz para 0,8. O endereço da matriz de cores é passado para o método ImageAttributes::SetColorMatrix do objeto ImageAttributes e o endereço do objeto ImageAttributes é passado para o método DrawImage de um objeto Graphics .

// Create a Bitmap object and load it with the texture image.
Bitmap bitmap(L"Texture1.jpg");
Pen pen(Color(255, 0, 0, 0), 25);
// Initialize the color matrix.
// Notice the value 0.8 in row 4, column 4.
ColorMatrix colorMatrix = {1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
                           0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
                           0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
                           0.0f, 0.0f, 0.0f, 0.8f, 0.0f,
                           0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
// Create an ImageAttributes object and set its color matrix.
ImageAttributes imageAtt;
imageAtt.SetColorMatrix(&colorMatrix, ColorMatrixFlagsDefault,
   ColorAdjustTypeBitmap);
// First draw a wide black line.
graphics.DrawLine(&pen, Point(10, 35), Point(200, 35));
// Now draw the semitransparent bitmap image.
INT iWidth = bitmap.GetWidth();
INT iHeight = bitmap.GetHeight();
graphics.DrawImage(
   &bitmap, 
   Rect(30, 0, iWidth, iHeight),  // Destination rectangle
   0,                             // Source rectangle X 
   0,                             // Source rectangle Y
   iWidth,                        // Source rectangle width
   iHeight,                       // Source rectangle height
   UnitPixel, 
   &imageAtt);

Durante o processamento, os valores alfa no bitmap são convertidos em 80 por cento do que eram. Isso resulta em uma imagem que é combinada com a tela de fundo. Como mostra a ilustração a seguir, a imagem de bitmap é transparente; é possível ver a linha preta sólida através dela.

ilustração semelhante à anterior, mas a imagem é sem transparente

Nos pontos em que a imagem está sobre a parte branca da tela de fundo, ela é combinada com a cor branca. Nos pontos em que imagem cruza a linha preta, ela é combinada a cor preta.