Compartilhar via


Definindo os valores alfa de pixels individuais

O tópico Usando uma matriz de cores para definir valores alfa em imagens mostra um método não estruturativo para alterar os valores alfa de uma imagem. O exemplo nesse tópico renderiza uma imagem semitransparentemente, mas os dados de pixel no bitmap não são alterados. Os valores alfa são alterados somente durante a renderização.

O exemplo a seguir mostra como alterar os valores alfa de pixels individuais. O código no exemplo realmente altera as informações alfa em um objeto Bitmap . A abordagem é muito mais lenta do que usar uma matriz de cores e um objeto ImageAttributes , mas fornece controle sobre os pixels individuais no bitmap.

INT iWidth = bitmap.GetWidth();
INT iHeight = bitmap.GetHeight();
Color color, colorTemp;
for(INT iRow = 0; iRow < iHeight; iRow++)
{
   for(INT iColumn = 0; iColumn < iWidth; iColumn++)
   {
      bitmap.GetPixel(iColumn, iRow, &color);
      colorTemp.SetValue(color.MakeARGB(
         (BYTE)(255 * iColumn / iWidth), 
         color.GetRed(),
         color.GetGreen(),
         color.GetBlue()));
      bitmap.SetPixel(iColumn, iRow, colorTemp);
   }
}
// First draw a wide black line.
Pen pen(Color(255, 0, 0, 0), 25);
graphics.DrawLine(&pen, 10, 35, 200, 35);
// Now draw the modified bitmap.
graphics.DrawImage(&bitmap, 30, 0, iWidth, iHeight);

A ilustração a seguir mostra a imagem resultante.

ilustração mostrando uma imagem que fica mais opaca da esquerda para a direita, sobre um retângulo preto

O exemplo de código anterior usa loops aninhados para alterar o valor alfa de cada pixel no bitmap. Para cada pixel, Bitmap::GetPixel obtém a cor existente, Color::SetValue cria uma cor temporária que contém o novo valor alfa e, em seguida, Bitmap::SetPixel define a nova cor. O valor alfa é definido com base na coluna do bitmap. Na primeira coluna, alpha é definido como 0. Na última coluna, alfa é definido como 255. Portanto, a imagem resultante passa de totalmente transparente (na borda esquerda) para totalmente opaca (na borda direita).

Bitmap::GetPixel e Bitmap::SetPixel fornecem controle dos valores de pixel individuais. No entanto, usar Bitmap::GetPixel e Bitmap::SetPixel não é tão rápido quanto usar a classe ImageAttributes e a estrutura ColorMatrix .