Delen via


Kleuren van het scheren

Het scheren verhoogt of verlaagt een kleurcomponent met een hoeveelheid die evenredig is aan een andere kleurcomponent. Denk bijvoorbeeld aan de transformatie waarbij het rode onderdeel met de helft van de waarde van het blauwe onderdeel wordt verhoogd. Onder een dergelijke transformatie zou de kleur (0,2, 0,5, 1) worden (0,7, 0,5, 1). Het nieuwe rode onderdeel is 0,2 + (1/2)(1) = 0,7.

In het volgende voorbeeld wordt een Image-object samengesteld uit het bestand ColorBars4.bmp. Vervolgens past de code de afschuiftransformatie toe die in de vorige alinea wordt beschreven op elke pixel in de afbeelding.

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);

In de volgende afbeelding ziet u de oorspronkelijke afbeelding aan de linkerkant en de geschaarde afbeelding aan de rechterkant.

afbeelding met vier gekleurde balken en vervolgens dezelfde balken met verschillende kleuren

In de volgende tabel ziet u de kleurvectoren voor de vier balken voor en na de afschuiftransformatie.

Origineel Geschoren
(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)