Partager via


Conversion des couleurs

Une translation ajoute une valeur à une ou plusieurs des quatre composantes. Les entrées de la matrice de couleurs représentant les translations sont présentées dans le tableau suivant.

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

L'exemple suivant construit un objet Image à partir du fichier ColorBars.bmp. Puis le code ajoute 0,75 au composant rouge de chaque pixel dans l'image. L'image d'origine est dessinée le long de l'image transformée.

Dim image = 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)
[C#]
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);

L'illustration suivante montre l'image d'origine sur la gauche et l'image transformée sur la droite.

Le tableau suivant répertorie les vecteurs de couleur correspondant aux quatre barres situées de part et d'autre de la translation rouge. La valeur maximale d'une composante de couleur est 1, la composante rouge de la seconde ligne ne change pas. (De même, la valeur minimale d'une composante de couleur est 0.)

D'origine Traduite
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)