Como: Usar o modo de composição para mistura alfa de controle

Pode haver ocasiões em que você deseja criar um bitmap fora da tela tem as seguintes características:

  • Cores têm valores de alfa menor que 255.

  • sistema autônomo cores não são alfa misturados entre si enquanto você cria o bitmap.

  • Quando você exibe o bitmap concluído, as cores no bitmap são alfa combinada com as cores de plano de fundo no dispositivo de vídeo.

Para criar tal um bitmap, construir um em branco Bitmap objeto e, então, construir um Graphics objeto baseado nesse bitmap. conjunto o modo de composição do Graphics objeto para CompositingMode.SourceCopy.

Exemplo

O exemplo a seguir cria um Graphics objeto com base em um Bitmap objeto. O código usa o Graphics objeto junto com dois pincéis semitransparentes (alfa = 160) para pintar no bitmap. O código preenche uma elipse vermelha e uma elipse verde usando os pincéis semitransparentes.Elipse verde se sobrepõe a elipse vermelha, mas não o verde é combinado com o vermelho porque o modo de composição do Graphics objeto é definido como SourceCopy.

O código desenha o bitmap na tela duas vezes: vez em um plano de fundo branco e uma vez em um plano de fundo multicolorido.Os pixels no bitmap que fazem parte de dois elipses têm um componente de 160, alfa para que as elipses são misturadas com as cores de plano de fundo na tela.

A ilustração a seguir mostra a saída do exemplo de código.Observe que as elipses são combinadas com o plano de fundo, mas eles não são misturados entre si.

O exemplo de código contém esta demonstrativo:

bitmapGraphics.CompositingMode = CompositingMode.SourceCopy

bitmapGraphics.CompositingMode = CompositingMode.SourceCopy;

Se você desejar que sistema autônomo elipses para ser combinado com Outros bem sistema autônomo com o plano de fundo, altere essa demonstrativo para o seguinte:

bitmapGraphics.CompositingMode = CompositingMode.SourceOver

bitmapGraphics.CompositingMode = CompositingMode.SourceOver;

A ilustração a seguir mostra a saída do código revisado.

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

Compilando o código

The preceding example is designed for use with Windows Forms, and it requires PaintEventArgse, which is a parameter of PaintEventHandler.

Consulte também

Referência

FromArgb

Outros recursos

Linhas de mistura alfa e preenchimentos