Partager via


Comment : utiliser une matrice de couleurs pour définir des valeurs alpha dans des images

La Bitmap classe (qui hérite de la Image classe) et la ImageAttributes classe fournissent des fonctionnalités pour obtenir et définir des valeurs de pixels. Vous pouvez utiliser la ImageAttributes classe pour modifier les valeurs alpha d’une image entière, ou vous pouvez appeler la SetPixel méthode de la Bitmap classe pour modifier des valeurs de pixel individuelles.

Exemple

La ImageAttributes classe a de nombreuses propriétés que vous pouvez utiliser pour modifier des images pendant le rendu. Dans l’exemple suivant, un ImageAttributes objet est utilisé pour définir toutes les valeurs alpha sur 80 % de ce qu’ils é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 SetColorMatrix méthode de l’objet ImageAttributes , et l’objet ImageAttributes est passé à la DrawString méthode de l’objet Graphics .

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.

Screenshot of alpha blending using a matrix.

Où l’image se trouve sur la partie blanche de l’arrière-plan, l’image a été mélangée avec la couleur blanche. Là où l’image traverse la ligne noire, l’image est mélangée avec la couleur noire.

// Create the Bitmap object and load it with the texture image.
Bitmap bitmap = new Bitmap("Texture.jpg");

// Initialize the color matrix.
// Note the value 0.8 in row 4, column 4.
float[][] matrixItems ={
   new float[] {1, 0, 0, 0, 0},
   new float[] {0, 1, 0, 0, 0},
   new float[] {0, 0, 1, 0, 0},
   new float[] {0, 0, 0, 0.8f, 0},
   new float[] {0, 0, 0, 0, 1}};
ColorMatrix colorMatrix = new ColorMatrix(matrixItems);

// Create an ImageAttributes object and set its color matrix.
ImageAttributes imageAtt = new ImageAttributes();
imageAtt.SetColorMatrix(
   colorMatrix,
   ColorMatrixFlag.Default,
   ColorAdjustType.Bitmap);

// First draw a wide black line.
e.Graphics.DrawLine(
   new Pen(Color.Black, 25),
   new Point(10, 35),
   new Point(200, 35));

// Now draw the semitransparent bitmap image.
int iWidth = bitmap.Width;
int iHeight = bitmap.Height;
e.Graphics.DrawImage(
   bitmap,
   new Rectangle(30, 0, iWidth, iHeight),  // destination rectangle
   0.0f,                          // source rectangle x
   0.0f,                          // source rectangle y
   iWidth,                        // source rectangle width
   iHeight,                       // source rectangle height
   GraphicsUnit.Pixel,
   imageAtt);
' Create the Bitmap object and load it with the texture image.
Dim bitmap As New Bitmap("Texture.jpg")

' Initialize the color matrix.
' Note the value 0.8 in row 4, column 4.
Dim matrixItems As Single()() = { _
   New Single() {1, 0, 0, 0, 0}, _
   New Single() {0, 1, 0, 0, 0}, _
   New Single() {0, 0, 1, 0, 0}, _
   New Single() {0, 0, 0, 0.8F, 0}, _
   New Single() {0, 0, 0, 0, 1}}

Dim colorMatrix As New ColorMatrix(matrixItems)

' Create an ImageAttributes object and set its color matrix.
Dim imageAtt As New ImageAttributes()
imageAtt.SetColorMatrix( _
   colorMatrix, _
   ColorMatrixFlag.Default, _
   ColorAdjustType.Bitmap)

' First draw a wide black line.
e.Graphics.DrawLine( _
   New Pen(Color.Black, 25), _
   New Point(10, 35), _
   New Point(200, 35))

' Now draw the semitransparent bitmap image.
Dim iWidth As Integer = bitmap.Width
Dim iHeight As Integer = bitmap.Height

' Pass in the destination rectangle (2nd argument) and the x _
' coordinate (3rd argument), x coordinate (4th argument), width _
' (5th argument), and height (6th argument) of the source rectangle.
e.Graphics.DrawImage( _
   bitmap, _
   New Rectangle(30, 0, iWidth, iHeight), _
   0.0F, _
   0.0F, _
   iWidth, _
   iHeight, _
   GraphicsUnit.Pixel, _
   imageAtt)

Compilation du code

L'exemple précédent est conçu pour une utilisation avec Windows Forms et nécessite PaintEventArgse, qui est un paramètre de PaintEventHandler.

Voir aussi