Comment : traduire les couleurs d'une image

Une traduction ajoute une valeur à un ou plusieurs des quatre composants de couleur. Les entrées de matrice de couleurs qui représentent les traductions sont fournies dans le tableau suivant.

Composant à traduire Entrée de matrice
Rouge [4][0]
Vert [4][1]
Bleu [4][2]
Alpha [4][3]

Exemple

L’exemple suivant construit un Image objet à partir du fichier ColorBars.bmp. Ensuite, le code ajoute 0,75 au composant rouge de chaque pixel de l’image. L’image d’origine est dessinée en même temps que l’image transformée.

L’illustration suivante montre l’image d’origine à gauche et l’image transformée à droite :

Screenshot of the original and transformed image.

Le tableau suivant répertorie les vecteurs de couleur des quatre barres avant et après la traduction rouge. Notez que, étant donné que la valeur maximale d’un composant de couleur est 1, le composant rouge de la deuxième ligne ne change pas. (De même, la valeur minimale d’un composant de couleur est 0.)

Original Traduit
Noir (0, 0, 0, 1) (0.75, 0, 0, 1)
Rouge (1, 0, 0, 1) (1, 0, 0, 1)
Vert (0, 1, 0, 1) (0.75, 1, 0, 1)
Bleu (0, 0, 1, 1) (0.75, 0, 1, 1)
Image image = new Bitmap("ColorBars.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;

float[][] colorMatrixElements = {
   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,  1, 0},
   new float[] {.75f, 0, 0, 0, 1}};

ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);

imageAttributes.SetColorMatrix(
   colorMatrix,
   ColorMatrixFlag.Default,
   ColorAdjustType.Bitmap);

e.Graphics.DrawImage(image, 10, 10, width, height);

e.Graphics.DrawImage(
   image,
   new Rectangle(150, 10, width, height),  // destination rectangle
   0, 0,        // upper-left corner of source rectangle
   width,       // width of source rectangle
   height,      // height of source rectangle
   GraphicsUnit.Pixel,
   imageAttributes);
Dim image As New Bitmap("ColorBars.bmp")
Dim imageAttributes As New ImageAttributes()
Dim width As Integer = image.Width
Dim height As Integer = image.Height

Dim colorMatrixElements 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, 1, 0}, _
   New Single() {0.75F, 0, 0, 0, 1}}

Dim colorMatrix As New ColorMatrix(colorMatrixElements)

imageAttributes.SetColorMatrix( _
   colorMatrix, _
   ColorMatrixFlag.Default, _
   ColorAdjustType.Bitmap)

e.Graphics.DrawImage(image, 10, 10, width, height)

' Pass in the destination rectangle (2nd argument), the upper-left corner 
' (3rd and 4th arguments), width (5th argument),  and height (6th 
' argument) of the source rectangle.
e.Graphics.DrawImage( _
   image, _
   New Rectangle(150, 10, width, height), _
   0, 0, _
   width, _
   height, _
   GraphicsUnit.Pixel, _
   imageAttributes)

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 du gestionnaire d'événements Paint. Remplacez par ColorBars.bmp un nom de fichier image et un chemin d’accès valides sur votre système.

Voir aussi