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