Compartir a través de


Uso una matriz de colores para establecer valores alfa en imágenes

La clase Bitmap (que hereda de la clase Image ) y la clase ImageAttributes proporcionan funcionalidad para obtener y establecer valores de píxeles. Puede usar la clase ImageAttributes para modificar los valores alfa de una imagen completa, o bien puede llamar al método Bitmap::SetPixel de la clase Bitmap para modificar valores de píxeles individuales. Para obtener más información sobre cómo establecer valores de píxeles individuales, vea Establecer los valores alfa de píxeles individuales.

En el ejemplo siguiente se dibuja una línea negra ancha y, a continuación, se muestra una imagen opaca que cubre parte de esa línea.

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

En la ilustración siguiente se muestra la imagen resultante, que se dibuja en (30, 0). Tenga en cuenta que la línea negra ancha no se muestra a través de la imagen.

ilustración en la que se muestra una imagen opaca superpuesta a un rectángulo fino, ancho y negro

La clase ImageAttributes tiene muchas propiedades que puede usar para modificar imágenes durante la representación. En el ejemplo siguiente, se usa un objeto ImageAttributes para establecer todos los valores alfa en el 80 por ciento de lo que eran. Esto se hace inicializando una matriz de colores y estableciendo el valor de escala alfa de la matriz en 0,8. La dirección de la matriz de colores se pasa al método ImageAttributes::SetColorMatrix del objeto ImageAttributes y la dirección del objeto ImageAttributes se pasa al método DrawImage de un 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 la representación, los valores alfa del mapa de bits se convierten al 80 % de lo que eran. Esto da como resultado una imagen que se combina con el fondo. Como se muestra en la ilustración siguiente, la imagen del mapa de bits es transparente; se puede ver la línea negra sólida a través de ella.

ilustración similar a la anterior, pero la imagen es sem-transparent

En las zonas en las que la imagen se encuentra sobre la parte blanca del fondo, la imagen se ha combinado con el color blanco. En las zonas en las que la imagen cruza la línea negra, la imagen se combina con el color negro.