Gewusst wie: Kopieren von Bildern
Aktualisiert: November 2007
.NET Compact Framework bietet zwar keine Unterstützung für die Image.Clone-Methode, Bilder und Teile von Bildern können jedoch trotzdem kopiert werden. In den folgenden Beispielen werden diese Aufgaben veranschaulicht:
Definieren einer Methode zur Erstellung einer Bitmap
Definieren einer überladenen Methode, um eine Bitmap oder einen Teil der Bitmap zu kopieren
Aufrufen dieser Methoden und Zeichnen der Bilder auf dem Bildschirm durch Überschreiben der OnPaint-Methode des Formulars
So erstellen Sie eine Bitmap
- Diese Methode erstellt eine Bitmap zu Demonstrationszwecken.
' Creates a bitmap for copying.
Function CreateBitmap(sideSize As Integer) As Bitmap
Dim bmp As New Bitmap(sideSize, sideSize)
Dim g As Graphics = Graphics.FromImage(bmp)
g.FillEllipse(New SolidBrush(Color.Red), 0, 0, sideSize, sideSize)
g.DrawLine(New Pen(Color.Black), 0, 0, sideSize, sideSize)
g.DrawLine(New Pen(Color.Black), sideSize, 0, 0, sideSize)
g.Dispose()
Return bmp
End Function
// Creates a bitmap for copying.
private Bitmap CreateBitmap(int sideSize)
{
Bitmap bmp = new Bitmap(sideSize, sideSize);
Graphics g = Graphics.FromImage(bmp);
g.FillEllipse(new SolidBrush(Color.Red), 0, 0, sideSize, sideSize);
g.DrawLine(new Pen(Color.Black), 0, 0, sideSize, sideSize);
g.DrawLine(new Pen(Color.Black), sideSize, 0, 0, sideSize);
g.Dispose();
return bmp;
}
So klonen Sie eine Bitmap
- In dieser überladenen Methode wird eine Quellbitmap als Parameter verwendet und die Bitmap als Kopie zurückgegeben.
' Copies the entire bitmap.
Overloads Function CopyBitmap(source As Bitmap) As Bitmap
Return New Bitmap(source)
End Function
// Copies the entire bitmap.
protected Bitmap CopyBitmap(Bitmap source)
{
return new Bitmap(source);
}
So kopieren Sie einen Teil der Bitmap
- Diese überladene Methode verwendet ein Rectangle als Parameter, um die Abmessungen des Teiles der Bitmap festzulegen, der zurückgegeben werden soll.
' Copies a part of the bitmap.
Overloads Function CopyBitmap(source As Bitmap, part As Rectangle) As Bitmap
Dim bmp As New Bitmap(part.Width, part.Height)
Dim g As Graphics = Graphics.FromImage(bmp)
g.DrawImage(source, 0, 0, part, GraphicsUnit.Pixel)
g.Dispose()
Return bmp
End Function
// Copies a part of a bitmap.
protected Bitmap CopyBitmap(Bitmap source, Rectangle part)
{
Bitmap bmp = new Bitmap(part.Width, part.Height);
Graphics g = Graphics.FromImage(bmp);
g.DrawImage(source,0,0,part,GraphicsUnit.Pixel);
g.Dispose();
return bmp;
}
So erstellen, kopieren und zeichnen Sie die Bitmaps
- Diese überladene OnPaint-Methode ruft die Methoden auf, mit denen Sie eine Bitmap erstellen, anschließend klonen und einen Teil davon kopieren können. Darüber hinaus speichert sie die geklonte Bitmap in einer Datei.
' Draws the bitmaps on the form.
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim arialFont As Font
Dim blackBrush As Brush
arialFont = New Font("Arial", 10, FontStyle.Regular)
blackBrush = New SolidBrush(Color.Black)
' Set the size of the sides of the bitmap,
' and get one-third of it for the center bitmap.
Dim sidesize As Integer = 75
Dim third As Integer = CInt(sidesize / 3)
' Create bitmap.
Dim source As Bitmap = CreateBitmap(sidesize)
' Copy entirely as a clone.
Dim clone As Bitmap = CopyBitmap(source)
' Copy the center part of the bitmap.
Dim center As Bitmap = _
CopyBitmap(source, New Rectangle(third, third, third, third))
' Save the bitmap to a file.
clone.Save("newbitmap.bmp", ImageFormat.Bmp)
' Draw the source, clone, and partial
' bitmaps vertically down the screen.
Dim y As Integer = 10
e.Graphics.DrawString("source bitmap:", ArialFont, BlackBrush, 10, y)
y += 20
e.Graphics.DrawImage(source, 10, y)
y += source.Height + 10
e.Graphics.DrawString("clone bitmap:", ArialFont, BlackBrush, 10, y)
y += 20
e.Graphics.DrawImage(clone, 10, y)
y += clone.Height + 10
e.Graphics.DrawString("center part of bitmap:", ArialFont, BlackBrush, 10, y)
y += 20
e.Graphics.DrawImage(center, 10, y)
y += center.Height + 10
' Dispose graphic objects.
arialFont.Dispose()
blackBrush.Dispose()
End Sub
// Draws the bitmaps on the form.
protected override void OnPaint(PaintEventArgs e)
{
Font arialFont;
Brush blackBrush;
arialFont = new Font("Arial", 10, FontStyle.Regular);
blackBrush = new SolidBrush(Color.Black);
// Set the size of the sides of the bitmap,
// and get one-third of it for the center bitmap.
int sidesize = 75;
int third = (int) sidesize/3;
// Create bitmap.
source = CreateBitmap(sidesize);
// Copy entirely as a clone.
clone = CopyBitmap(source);
// Copy the center part of the bitmap.
center = CopyBitmap(source, new Rectangle(third, third, third, third));
// Save the bitmap to a file.
clone.Save("newbitmap.bmp", ImageFormat.Bmp);
// Draw the source, clone, and partial
// bitmaps vertically down the screen.
int y = 10;
e.Graphics.DrawString("source bitmap:", arialFont, blackBrush, 10, y);
y += 20;
e.Graphics.DrawImage(source, 10, y);
y += source.Height + 10;
e.Graphics.DrawString("clone bitmap:", arialFont, blackBrush, 10, y);
y += 20;
e.Graphics.DrawImage(clone, 10, y);
y += clone.Height + 10;
e.Graphics.DrawString("center part of bitmap:", arialFont, blackBrush, 10, y);
y += 20;
e.Graphics.DrawImage(center, 10, y);
y += center.Height + 10;
// Dispose graphic objects.
arialFont.Dispose();
blackBrush.Dispose();
}
Kompilieren des Codes
Für dieses Beispiel sind Verweise auf die folgenden Namespaces erforderlich:
Robuste Programmierung
Beachten Sie, dass das Font-Objekt und das Brush-Objekt in der überladenen OnPaint-Methode explizit verworfen werden. Das Graphics-Objekt, das von der Graphics-Eigenschaft des PaintEventArgs-Objekts zurückgegeben wird, wird vom Garbage Collector zerstört und muss nicht explizit verworfen werden.