Procedura: utilizzare la modalità di composizione per controllare la fusione alfaHow to: Use Compositing Mode to Control Alpha Blending

Può accadere quando si desidera creare una bitmap fuori schermo che presenta le caratteristiche seguenti:There may be times when you want to create an off-screen bitmap that has the following characteristics:

  • Colori hanno valori alfa minore di 255.Colors have alpha values that are less than 255.

  • I colori non sono alfa combinati tra loro durante la creazione di bitmap.Colors are not alpha blended with each other as you create the bitmap.

  • Quando si visualizza l'immagine bitmap completata, i colori nella mappa di bit sono alpha sfumato con i colori di sfondo sul dispositivo di visualizzazione.When you display the finished bitmap, colors in the bitmap are alpha blended with the background colors on the display device.

Per creare una mappa di bit, creare uno spazio vuoto Bitmap dell'oggetto e quindi creare un Graphics oggetto basato sull'immagine.To create such a bitmap, construct a blank Bitmap object, and then construct a Graphics object based on that bitmap. Impostare la modalità di composizione del Graphics oggetto CompositingMode.SourceCopy.Set the compositing mode of the Graphics object to CompositingMode.SourceCopy.

EsempioExample

Nell'esempio seguente viene creato un Graphics oggetto basato su un Bitmap oggetto.The following example creates a Graphics object based on a Bitmap object. Il codice Usa il Graphics oggetto insieme a due pennelli semitrasparenti (alfa = 160) per colorare l'immagine bitmap.The code uses the Graphics object along with two semitransparent brushes (alpha = 160) to paint on the bitmap. Il codice verrà inserito un'ellisse rossa e un'ellisse verde mediante i pennelli semitrasparenti.The code fills a red ellipse and a green ellipse using the semitransparent brushes. Ellisse di colore verde si sovrappone colore rosso, ma il verde non viene sfumato con il rosso perché la modalità di composizione del Graphics oggetto è impostato su SourceCopy.The green ellipse overlaps the red ellipse, but the green is not blended with the red because the compositing mode of the Graphics object is set to SourceCopy.

Il codice la bitmap disegnata sullo schermo due volte: una volta su sfondo bianco e una volta su uno sfondo.The code draws the bitmap on the screen twice: once on a white background and once on a multicolored background. Il pixel della bitmap che fanno parte di due ellissi presentano un componente alfa di 160, pertanto i puntini di sospensione sono combinati con i colori di sfondo sullo schermo.The pixels in the bitmap that are part of the two ellipses have an alpha component of 160, so the ellipses are blended with the background colors on the screen.

Nella figura seguente mostra l'output dell'esempio di codice.The following illustration shows the output of the code example. Si noti che i puntini di sospensione sono combinati con lo sfondo, ma non sono combinati tra loro.Note that the ellipses are blended with the background, but they are not blended with each other.

Copia di origineSource Copy

L'esempio di codice contiene questa istruzione:The code example contains this statement:

bitmapGraphics.CompositingMode = CompositingMode.SourceCopy;
bitmapGraphics.CompositingMode = CompositingMode.SourceCopy

Se si desidera i puntini di sospensione per essere combinati tra loro e con lo sfondo, è possibile modificare l'istruzione per le operazioni seguenti:If you want the ellipses to be blended with each other as well as with the background, change that statement to the following:

bitmapGraphics.CompositingMode = CompositingMode.SourceOver;
bitmapGraphics.CompositingMode = CompositingMode.SourceOver

Nella figura seguente mostra l'output del codice modificato.The following illustration shows the output of the revised code.

Origine suSource Over

// 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);
' 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)

Compilazione del codiceCompiling the Code

L'esempio precedente è progettato per l'uso con Windows Form e richiede PaintEventArgs e, ovvero un parametro di PaintEventHandler.The preceding example is designed for use with Windows Forms, and it requires PaintEventArgse, which is a parameter of PaintEventHandler.

Vedere ancheSee Also

FromArgb
Linee e riempimenti con fusione alfaAlpha Blending Lines and Fills