Gör så här: Använd sammansättningsläge för att styra alfablandning
Det kan finnas tillfällen när du vill skapa en bitmapp utanför skärmen som har följande egenskaper:
Färger har alfavärden som är mindre än 255.
Färgerna är inte alfablandade med varandra när du skapar bitmappen.
När du visar den färdiga bitmappen är färgerna i bitmappen alfablandade med bakgrundsfärgerna på visningsenheten.
Skapa en sådan bitmapp genom att skapa ett tomt Bitmap objekt och sedan konstruera ett Graphics objekt baserat på bitmappen. Ange Graphics-objektets sammansättningsläge till CompositingMode.SourceCopy.
Exempel
I följande exempel skapas ett Graphics objekt baserat på ett Bitmap objekt. Koden använder Graphics-objektet tillsammans med två halvtransparent penslar (alfa = 160) för att måla på bitmappen. Koden fyller en röd ellips och en grön ellips med semitransparentborstarna. Den gröna ellipsen överlappar den röda ellipsen, men det gröna blandas inte med det röda eftersom Graphics-objektets sammansättningsläge är inställt på SourceCopy.
Koden ritar bitmappen på skärmen två gånger: en gång i en vit bakgrund och en gång i en flerfärgad bakgrund. Bildpunkterna i bitmappen som ingår i de två ellipserna har en alfakomponent på 160, så ellipserna blandas med bakgrundsfärgerna på skärmen.
Följande bild visar utdata från kodexemplet. Observera att ellipserna blandas med bakgrunden, men att de inte blandas med varandra.
Kodexemplet innehåller den här instruktionen:
bitmapGraphics.CompositingMode = CompositingMode.SourceCopy;
bitmapGraphics.CompositingMode = CompositingMode.SourceCopy
Om du vill att ellipserna ska blandas med varandra och med bakgrunden ändrar du instruktionen till följande:
bitmapGraphics.CompositingMode = CompositingMode.SourceOver;
bitmapGraphics.CompositingMode = CompositingMode.SourceOver
Följande bild visar utdata från den reviderade koden.
// 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)
Kompilera koden
Föregående exempel är utformat för användning med Windows Forms och kräver PaintEventArgse
, som är en parameter för PaintEventHandler.
Se även
.NET Desktop feedback