Condividi tramite


Uso di una matrice di colori per impostare valori alfa nelle immagini

La classe Bitmap (che eredita dalla classe Image ) e la classe ImageAttributes forniscono funzionalità per ottenere e impostare valori pixel. È possibile usare la classe ImageAttributes per modificare i valori alfa per un'intera immagine oppure chiamare il metodo Bitmap::SetPixel della classe Bitmap per modificare i singoli valori pixel. Per altre informazioni sull'impostazione di singoli valori di pixel, vedere Impostazione dei valori alfa di singoli pixel.

L'esempio seguente disegna una linea nera ampia e quindi visualizza un'immagine opaca che copre parte di tale linea.

Bitmap bitmap(L"Texture1.jpg");
Pen pen(Color(255, 0, 0, 0), 25);
// First draw a wide black line.
graphics.DrawLine(&pen, Point(10, 35), Point(200, 35));
// Now draw an image that covers part of the black line.
graphics.DrawImage(&bitmap,
   Rect(30, 0, bitmap.GetWidth(), bitmap.GetHeight()));

La figura seguente mostra l'immagine risultante, disegnata in (30, 0). Si noti che la linea nera ampia non viene visualizzata tramite l'immagine.

figura che mostra un'immagine opaca sovrapposta a un rettangolo sottile, ampio, nero

La classe ImageAttributes include molte proprietà che è possibile usare per modificare le immagini durante il rendering. Nell'esempio seguente viene usato un oggetto ImageAttributes per impostare tutti i valori alfa sul 80% di quelli che erano. Questa operazione viene eseguita inizializzando una matrice di colori e impostando il valore di ridimensionamento alfa nella matrice su 0,8. L'indirizzo della matrice di colori viene passato al metodo ImageAttributes::SetColorMatrix dell'oggetto ImageAttributes e l'indirizzo dell'oggetto ImageAttributes viene passato al metodo DrawImage di un oggetto Graphics .

// Create a Bitmap object and load it with the texture image.
Bitmap bitmap(L"Texture1.jpg");
Pen pen(Color(255, 0, 0, 0), 25);
// Initialize the color matrix.
// Notice the value 0.8 in row 4, column 4.
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, 1.0f, 0.0f, 0.0f,
                           0.0f, 0.0f, 0.0f, 0.8f, 0.0f,
                           0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
// Create an ImageAttributes object and set its color matrix.
ImageAttributes imageAtt;
imageAtt.SetColorMatrix(&colorMatrix, ColorMatrixFlagsDefault,
   ColorAdjustTypeBitmap);
// First draw a wide black line.
graphics.DrawLine(&pen, Point(10, 35), Point(200, 35));
// Now draw the semitransparent bitmap image.
INT iWidth = bitmap.GetWidth();
INT iHeight = bitmap.GetHeight();
graphics.DrawImage(
   &bitmap, 
   Rect(30, 0, iWidth, iHeight),  // Destination rectangle
   0,                             // Source rectangle X 
   0,                             // Source rectangle Y
   iWidth,                        // Source rectangle width
   iHeight,                       // Source rectangle height
   UnitPixel, 
   &imageAtt);

Durante il rendering, i valori alfa nella bitmap vengono convertiti al 80% di ciò che erano. Ciò comporta una fusione di un'immagine con lo sfondo. Come illustrato nella figura seguente, l'immagine bitmap sembra trasparente; si può vedere la linea nera unita attraverso di esso.

illustrazione simile a quella precedente, ma l'immagine è sem-transparent

Dove l'immagine si trova sulla parte bianca dello sfondo, l'immagine è stata unita al colore bianco. Dove l'immagine attraversa la linea nera, l'immagine viene unita al colore nero.