Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Es kann vorkommen, dass Sie eine Offscreen-Bitmap erstellen möchten, die die folgenden Merkmale aufweist:
Farben weisen Alphawerte auf, die kleiner als 255 sind.
Farben werden beim Erstellen der Bitmap nicht miteinander mittels Alphablending vermischt.
Wenn Sie die fertige Bitmap anzeigen, werden die Farben in der Bitmap mit den Hintergrundfarben auf dem Bildschirm alpha-blendet.
Um eine solche Bitmap zu erstellen, erstellen Sie ein leeres Bitmap Objekt, und erstellen Sie dann ein Graphics Objekt basierend auf dieser Bitmap. Legen Sie den Kompositingmodus des Graphics Objekts auf CompositingMode.SourceCopy.
Beispiel
Im folgenden Beispiel wird ein Graphics Objekt erstellt, das auf einem Bitmap Objekt basiert. Der Code verwendet das Graphics Objekt zusammen mit zwei semitransparenten Pinsel (Alpha = 160), um die Bitmap zu zeichnen. Der Code füllt mit den halbtransparenten Pinsel eine rote Ellipse und eine grüne Ellipse aus. Die grüne Ellipse überlappt die rote Ellipse, aber das Grün wird nicht mit dem Rot vermischt, da der Kompositingmodus des Graphics Objekts auf festgelegt SourceCopyist.
Der Code zeichnet die Bitmap zweimal auf dem Bildschirm: einmal auf einem weißen Hintergrund und einmal auf einem mehrfarbigen Hintergrund. Die Pixel in der Bitmap, die Teil der beiden Ellipsen sind, haben eine Alpha-Komponente von 160, sodass die Ellipsen mit den Hintergrundfarben des Bildschirms verschmelzen.
Die folgende Abbildung zeigt die Ausgabe des Codebeispiels. Beachten Sie, dass die Auslassungspunkte mit dem Hintergrund verblendet sind, aber nicht miteinander verblendet sind.
Das Codebeispiel enthält diese Anweisung:
bitmapGraphics.CompositingMode = CompositingMode.SourceCopy;
bitmapGraphics.CompositingMode = CompositingMode.SourceCopy
Wenn die Auslassungspunkte miteinander und mit dem Hintergrund kombiniert werden sollen, ändern Sie diese Anweisung wie folgt:
bitmapGraphics.CompositingMode = CompositingMode.SourceOver;
bitmapGraphics.CompositingMode = CompositingMode.SourceOver
Die folgende Abbildung zeigt die Ausgabe des überarbeiteten Codes.
// 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)
Code kompilieren
Das obige Beispiel ist für die Verwendung mit Windows Forms konzipiert und erfordert PaintEventArgse
, einen Parameter von PaintEventHandler.
Siehe auch
.NET Desktop feedback