Comment : altérer des couleurs

L'inclinaison augmente ou diminue une composante de couleur par un montant proportionnel à une autre composante de couleur. Par exemple, imaginez une transformation où la composante rouge serait augmentée de la moitié de la valeur de la composante bleu. Avec une transformation de ce style, la couleur (0,2, 0,5, 1) deviendrait (0,7, 0,5, 1). La nouvelle composante rouge est 0,2 + (1/2)(1) = 0,7.

Exemple

L'exemple suivant construit un objet Image à partir du fichier ColorBars4.bmp. Ensuite, le code applique la transformation d'inclinaison décrite dans le paragraphe précédent à chaque pixel de l'image.

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

Cisaillement des couleurs

Le tableau suivant répertorie les vecteurs de couleur correspondant aux quatre barres situées de part et d'autre de la transformation d'inclinaison.

D'origine

Incliné

(0, 0, 1, 1)

(0.5, 0, 1, 1)

(0.5, 1, 0.5, 1)

(0.75, 1, 0.5, 1)

(1, 1, 0, 1)

(1, 1, 0, 1)

(0.4, 0.4, 0.4, 1)

(0.6, 0.4, 0.4, 1)

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.5F, 0, 1, 0, 0}, _
        New Single() {0, 0, 0, 1, 0}, _
        New Single() {0, 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)

e.Graphics.DrawImage(image, New Rectangle(150, 10, width, height), 0, 0, _
    width, height, GraphicsUnit.Pixel, imageAttributes)
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.5f,  0,  1,  0, 0},
        new float[] {0,  0,  0,  1, 0},
        new float[] {0, 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);

Compilation du code

L'exemple précédent est destiné à une utilisation avec Windows Forms et nécessite PaintEventArgs e, qui est un paramètre du gestionnaire d'événements Paint. Remplacez ColorBars.bmp par le nom et le chemin d'accès d'une image valides sur votre système.

Voir aussi

Référence

ColorMatrix

ImageAttributes

Autres ressources

Graphiques et dessins dans les Windows Forms

Recoloriage des images