Partager via


Utilisation d’une matrice de couleurs pour définir des valeurs alpha dans des images

La classe Bitmap (qui hérite de la classe Image) et la classe ImageAttributes fournissent des fonctionnalités permettant d’obtenir et de définir des valeurs de pixels. Vous pouvez utiliser la classe ImageAttributes pour modifier les valeurs alpha d’une image entière, ou appeler la méthode Bitmap ::SetPixel de la classe Bitmap pour modifier des valeurs de pixels individuelles. Pour plus d’informations sur la définition de valeurs de pixels individuelles, consultez Définition des valeurs alpha des pixels individuels.

L’exemple suivant dessine une ligne noire large, puis affiche une image opaque qui couvre une partie de cette ligne.

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

L’illustration suivante montre l’image obtenue, qui est dessinée à (30, 0). Notez que la ligne noire large ne s’affiche pas dans l’image.

illustration montrant une image opaque qui chevauche un rectangle mince, large, noir

La classe ImageAttributes a de nombreuses propriétés que vous pouvez utiliser pour modifier des images pendant le rendu. Dans l'exemple suivant, un objet ImageAttributes est utilisé pour définir toutes les valeurs alpha à 80 % de ce qu'elles étaient. Pour ce faire, initialisez une matrice de couleur et définissez la valeur de mise à l’échelle alpha dans la matrice sur 0,8. L’adresse de la matrice de couleurs est passée à la méthode ImageAttributes ::SetColorMatrix de l’objet ImageAttributes, et l’adresse de l’objet ImageAttributes est passée à la méthode DrawImage d’un objet 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);

Pendant le rendu, les valeurs alpha dans la bitmap sont converties en 80 % de ce qu’elles étaient. Cela entraîne une image fusionnée avec l’arrière-plan. Comme l’illustre l’illustration suivante, l’image bitmap semble transparente ; vous pouvez voir la ligne noire solide à travers elle.

illustration similaire à la précédente, mais l’image est semi-transparente

Lorsque l'image est placée sur la partie blanche de l'arrière-plan, elle est fondue avec le blanc. Là où l’image traverse la ligne noire, l’image est mélangée avec la couleur noire.