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 vous pouvez 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 individuels, consultez Définition des valeurs alpha des pixels individuels.

L’exemple suivant dessine une large ligne noire, 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 résultante, 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 fin, large et noir

La classe ImageAttributes possède 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 sur 80 % de ce qu’elles étaient. Pour ce faire, initialisez une matrice de couleurs 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. Il en résulte une image qui est fusionnée avec l’arrière-plan. Comme le montre l’illustration suivante, l’image bitmap est transparente ; vous pouvez voir la ligne noire unie à travers elle.

illustration similaire à la précédente, mais l’image est sem-transparent

Lorsque l’image se trouve sur la partie blanche de l’arrière-plan, l’image a été fusionnée avec la couleur blanche. Lorsque l’image traverse la ligne noire, l’image est fusionnée avec la couleur noire.