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.
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.