Ridimensionamento dei colori
Una trasformazione di ridimensionamento moltiplica uno o più dei quattro componenti di colore per un numero. Le voci della matrice di colori che rappresentano il ridimensionamento vengono fornite nella tabella seguente.
Componente da ridimensionare | Voce matrice |
---|---|
Red | [0][0] |
Green | [1][1] |
Blu | [2][2] |
Alfa | [3][3] |
Nell'esempio seguente viene creato un oggetto Image dal file ColorBars2.bmp. Il codice ridimensiona quindi il componente blu di ogni pixel nell'immagine di un fattore pari a 2. L'immagine originale viene disegnata insieme all'immagine trasformata.
Image image(L"ColorBars2.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.0f, 0.0f, 2.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);
La figura seguente mostra l'immagine originale a sinistra e l'immagine in scala a destra.
La tabella seguente illustra i vettori di colore per le quattro barre prima e dopo il ridimensionamento blu. Si noti che il componente blu nella quarta barra dei colori è passato da 0,8 a 0,6. Questo perché GDI+ mantiene solo la parte frazionaria del risultato. Ad esempio, (2)(0,8) = 1,6 e la parte frazionaria di 1,6 è 0,6. Mantenendo solo la parte frazionaria, si garantisce che il risultato sia sempre compreso nell'intervallo [0, 1].
Originale | Scala |
---|---|
(0.4, 0.4, 0.4, 1) | (0.4, 0.4, 0.8, 1) |
(0.4, 0.2, 0.2, 1) | (0.4, 0.2, 0.4, 1) |
(0.2, 0.4, 0.2, 1) | (0.2, 0.4, 0.4, 1) |
(0.4, 0.4, 0.8, 1) | (0.4, 0.4, 0.6, 1) |
Nell'esempio seguente viene creato un oggetto Image dal file ColorBars2.bmp. Il codice ridimensiona quindi i componenti rosso, verde e blu di ogni pixel nell'immagine. I componenti rossi vengono ridimensionati del 25%, i componenti verdi vengono ridimensionati del 35% e i componenti blu vengono ridimensionati del 50%.
Image image(L"ColorBars.bmp");
ImageAttributes imageAttributes;
UINT width = image.GetWidth();
UINT height = image.GetHeight();
ColorMatrix colorMatrix = {
0.75f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.65f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.5f, 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);
La figura seguente mostra l'immagine originale a sinistra e l'immagine in scala a destra.
La tabella seguente mostra i vettori di colore per le quattro barre prima e dopo il ridimensionamento rosso, verde e blu.
Originale | Scala |
---|---|
(0.6, 0.6, 0.6, 1) | (0.45, 0.39, 0.3, 1) |
(0, 1, 1, 1) | (0, 0.65, 0.5, 1) |
(1, 1, 0, 1) | (0.75, 0.65, 0, 1) |
(1, 0, 1, 1) | (0.75, 0, 0.5, 1) |