Share via


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.

Mostra quattro barre colorate e quindi le stesse barre con colori diversi.

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.

illustrazione che mostra quattro barre colorate, quindi quelle barre con colori diversi

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)