Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El tema Usar 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 no se cambian los datos de píxeles del mapa de bits. 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 de un objeto mapa de bits. El enfoque es mucho más lento que usar una matriz de colores y un ImageAttributes objeto, 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.
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, alfa se establece en 255. Por lo tanto, la imagen resultante va 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íxel 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.