Partager via


Couleurs de cisaillement

Le cisaillement augmente ou diminue un composant de couleur d’une quantité proportionnelle à un autre composant de couleur. Par exemple, considérez la transformation où le composant rouge est augmenté de la moitié de la valeur du composant bleu. Sous une telle transformation, la couleur (0,2, 0,5, 1) deviendrait (0,7, 0,5, 1). Le nouveau composant rouge est 0,2 + (1/2)(1) = 0,7.

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

Image            image(L"ColorBars4.bmp");
ImageAttributes  imageAttributes;
UINT             width = image.GetWidth();
UINT             height = image.GetHeight();

ColorMatrix colorMatrix = {
   1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
   0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
   0.5f, 0.0f, 1.0f, 0.0f, 0.0f,
   0.0f, 0.0f, 0.0f, 1.0f, 0.0f,
   0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
   
imageAttributes.SetColorMatrix(
   &colorMatrix, 
   ColorMatrixFlagsDefault,
   ColorAdjustTypeBitmap);
   
graphics.DrawImage(&image, 10, 10, width, height);

graphics.DrawImage(
   &image, 
   Rect(150, 10, width, height),  // destination rectangle 
   0, 0,        // upper-left corner of source rectangle 
   width,       // width of source rectangle
   height,      // height of source rectangle
   UnitPixel,
   &imageAttributes);

L’illustration suivante montre l’image d’origine à gauche et l’image cisaillement à droite.

illustration montrant quatre barres colorées, puis les mêmes barres avec des couleurs différentes

Le tableau suivant montre les vecteurs de couleur des quatre barres avant et après la transformation de cisaillement.

Original Cisaillée
(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)