Procedura: utilizzare la modalità di composizione per controllare la fusione alfa

Possono verificarsi casi in cui è necessario creare un oggetto Bitmap fuori dallo schermo, con le caratteristiche che seguono:

  • I colori hanno valori alfa inferiori a 255.

  • Ai colori non viene applicata la fusione alfa quando si crea l'oggetto Bitmap.

  • A momento della visualizzazione dell'immagine bitmap completata ai colori dell'immagine viene applicata la fusione alfa rispetto ai colori di sfondo sulla periferica di visualizzazione.

Per creare un'immagine bitmap con queste caratteristiche, costruire un oggetto Bitmap vuoto, quindi un oggetto Graphics basato sull'immagine. Impostare la modalità di composizione dell'oggetto Graphics su CompositingMode.SourceCopy.

Esempio

Nell'esempio che segue viene creato un oggetto Graphics basato su un oggetto Bitmap. L'oggetto Graphics viene utilizzato insieme a due pennelli semitrasparenti, con alfa = 160, per colorare l'immagine bitmap. Utilizzando i pennelli semitrasparenti un ellisse viene riempito di colore rosso e uno di colore verde. L'ellisse di colore verde risulta sovrapposta a quella di colore rosso, ma il verde non viene sfumato con il rosso perché la modalità di composizione dell'oggetto Graphics è impostata su SourceCopy.

L'immagine bitmap viene disegnata due volte sullo schermo: una volta su sfondo bianco e una volta su sfondo multicolore. I pixel dell'immagine bitmap che sono parte dei due ellissi hanno una componente alfa pari a 160, perciò gli ellissi risultano sfumati con i colori di sfondo dello schermo.

Nell'illustrazione che segue si mostra l'output del codice. Si noti che le ellissi sono sfumate rispetto allo sfondo, ma non l'una rispetto alle altre.

Copia origine

Il codice di esempio contiene l'istruzione seguente:

        bitmapGraphics.CompositingMode = CompositingMode.SourceCopy

bitmapGraphics.CompositingMode = CompositingMode.SourceCopy;

Per fare in modo che le ellissi siano sfumate l'una rispetto alle altre nonché rispetto allo sfondo modificare l'istruzione nel modo seguente:

        bitmapGraphics.CompositingMode = CompositingMode.SourceOver

bitmapGraphics.CompositingMode = CompositingMode.SourceOver;

Nell'illustrazione che segue si mostra l'output del codice modificato.

Over origine

        ' Create a blank bitmap.
        Dim myBitmap As New Bitmap(180, 100)

        ' Create a Graphics object that we can use to draw on the bitmap.
        Dim bitmapGraphics As Graphics = Graphics.FromImage(myBitmap)

        ' Create a red brush and a green brush, each with an alpha value of 160.
        Dim redBrush As New SolidBrush(Color.FromArgb(160, 255, 0, 0))
        Dim greenBrush As New SolidBrush(Color.FromArgb(160, 0, 255, 0))

        ' Set the compositing mode so that when we draw overlapping ellipses,
        ' the colors of the ellipses are not blended.
        bitmapGraphics.CompositingMode = CompositingMode.SourceCopy

        ' Fill an ellipse using a red brush that has an alpha value of 160.
        bitmapGraphics.FillEllipse(redBrush, 0, 0, 150, 70)

        ' Fill a second ellipse using a green brush that has an alpha value of 
        ' 160. The green ellipse overlaps the red ellipse, but the green is not 
        ' blended with the red.
        bitmapGraphics.FillEllipse(greenBrush, 30, 30, 150, 70)

        'Set the compositing quality of the form's Graphics object. 
        e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected

        ' Draw a multicolored background.
        Dim colorBrush As New SolidBrush(Color.Aqua)
        e.Graphics.FillRectangle(colorBrush, 200, 0, 60, 100)
        colorBrush.Color = Color.Yellow
        e.Graphics.FillRectangle(colorBrush, 260, 0, 60, 100)
        colorBrush.Color = Color.Fuchsia
        e.Graphics.FillRectangle(colorBrush, 320, 0, 60, 100)

        'Display the bitmap on a white background.
        e.Graphics.DrawImage(myBitmap, 0, 0)

        ' Display the bitmap on a multicolored background.
        e.Graphics.DrawImage(myBitmap, 200, 0)

// Create a blank bitmap.
Bitmap myBitmap = new Bitmap(180, 100);

// Create a Graphics object that we can use to draw on the bitmap.
Graphics bitmapGraphics = Graphics.FromImage(myBitmap);

// Create a red brush and a green brush, each with an alpha value of 160.
SolidBrush redBrush = new SolidBrush(Color.FromArgb(160, 255, 0, 0));
SolidBrush greenBrush = new SolidBrush(Color.FromArgb(160, 0, 255, 0));

// Set the compositing mode so that when we draw overlapping ellipses,
// the colors of the ellipses are not blended.
bitmapGraphics.CompositingMode = CompositingMode.SourceCopy;

// Fill an ellipse using a red brush that has an alpha value of 160.
bitmapGraphics.FillEllipse(redBrush, 0, 0, 150, 70);

// Fill a second ellipse using a green brush that has an alpha value of 160. 
// The green ellipse overlaps the red ellipse, but the green is not 
// blended with the red.
bitmapGraphics.FillEllipse(greenBrush, 30, 30, 150, 70);

// Set the compositing quality of the form's Graphics object. 
e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected;

// Draw a multicolored background.
SolidBrush colorBrush = new SolidBrush(Color.Aqua);
e.Graphics.FillRectangle(colorBrush, 200, 0, 60, 100);
colorBrush.Color = Color.Yellow;
e.Graphics.FillRectangle(colorBrush, 260, 0, 60, 100);
colorBrush.Color = Color.Fuchsia;
e.Graphics.FillRectangle(colorBrush, 320, 0, 60, 100);

// Display the bitmap on a white background.
e.Graphics.DrawImage(myBitmap, 0, 0);

// Display the bitmap on a multicolored background.
e.Graphics.DrawImage(myBitmap, 200, 0);

Compilazione del codice

L'esempio riportato in precedenza è stato creato per essere utilizzato con Windows Form e richiede PaintEventArgs e un parametro di PaintEventHandler.

Vedere anche

Riferimenti

FromArgb

Altre risorse

Linee e riempimenti con fusione alfa