Compartir a través de


Establecer los valores alfa de píxeles individuales

El tema Uso de una matriz de colores para establecer valores alfa en imágenes muestra un método no destructivo para cambiar los valores alfa de una imagen. El ejemplo de ese tema representa una imagen semitransparentemente, pero los datos de píxeles del mapa de bits no cambian. Los valores alfa solo se modifican durante la representación.

En el ejemplo siguiente se muestra cómo cambiar los valores alfa de píxeles individuales. El código del ejemplo cambia realmente la información alfa en un objeto Bitmap . El enfoque es mucho más lento que usar una matriz de colores y un objeto ImageAttributes , pero proporciona control sobre los píxeles individuales del mapa de bits.

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

En la ilustración siguiente se muestra la imagen resultante.

ilustración que muestra una imagen que obtiene más opaco de izquierda a derecha, sobre un rectángulo negro

En el ejemplo de código anterior se usan bucles anidados para cambiar el valor alfa de cada píxel del mapa de bits. Para cada píxel, Bitmap::GetPixel obtiene el color existente, Color::SetValue crea un color temporal que contiene el nuevo valor alfa y, a continuación, Bitmap::SetPixel establece el nuevo color. El valor alfa se establece en función de la columna del mapa de bits. En la primera columna, alpha se establece en 0. En la última columna, alpha se establece en 255. Por lo tanto, la imagen resultante pasa de totalmente transparente (en el borde izquierdo) a totalmente opaco (en el borde derecho).

Bitmap::GetPixel y Bitmap::SetPixel le proporcionan el control de los valores de píxeles individuales. Sin embargo, el uso de Bitmap::GetPixel y Bitmap::SetPixel no es tan rápido como usar la clase ImageAttributes y la estructura ColorMatrix .