Autor Beitrag
Max064
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Di 13.07.10 08:53 
Hallo,

mit Hilfe einer neu erstellten Klasse und eines Arrays erstelle ich eine Liste an grafischen Objekten (u.a. Linien, Kreise, Bilder etc.). Diese werden durch den OnPaint Event Handler in einer bestimmten Zeichenfläche in den e.Graphics gezeichnet. Es ist also ein Art Grafikeditor.

Nun möchte ich aber diese neu erstellte Zeichnung als .jpg oder ähnliches speichern. Problem hier ist, ich muss eine Bitmap von dieser Zeichenfläche erstellen.
Wenn ich die gesamte Form mit DrawToBitmap zeichnen lasse, wird immer der gesamte Rahmen auch mit ausgegeben, was ich zu vermeiden suche.

Wie kann ich die Zeichenfläche als Control ansprechen, damit ich auch nie die zeichne? Oder gibt es eine andere Methode, um aus der Zeichenfläche eine Bitmap zu machen?

Ich bin dankbar für jede Hilfe!

lg Max
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 13.07.10 10:29 
Erstelle dir einfach eine Bitmap und zeichne dann nach Aufruf von
ausblenden C#-Quelltext
1:
Graphics g = Graphics::FromImage(bitmap);					

deine Grafik-Elemente dort drauf und speichere danach dann die Bitmap ab.

Alternativ kannst du auch umgekehrt vorgehen und immer direkt auf die Bitmap zeichnen und im OnPaint dann mittels "g.DrawImage(bitmap)" diese Bitmap darstellen. Problem hierbei ist dann nur das Rückgängigmachen von einzelnen Zeichenfunktionen (außer nochmals alles neu zu zeichnen).

Edit: du könntest auch einfach ein Panel nehmen und dort drauf zeichnen (anstatt auf der Form) und dann dessen DrawToBitmap-Methode aufrufen.
Max064 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Di 13.07.10 11:21 
Ich habe noch nie mit Panels gearbeitet! Verhält sich das Panel prinzipiell wie die Form? Also kann ich da einfach drauf zeichnen wie ich lustig bin, habe dann aber die Möglichkeit den Panel Steuerelement zu nutzen (und damit die Methode DrawToTimap zu nutzen?)?

lg Max
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 13.07.10 11:44 
Ja, ein Panel ist extra dafür gedacht (Panel.Border sollte dann auf 'None' stehen, damit du nicht auch dort einen Rand hast).
Also einfach das Panel auf die Form setzen, dann Dock auf 'Fill' stellen und dann statt OnPaint des Forms das Paint-Ereignis des Panels benutzen.

Für diesen Beitrag haben gedankt: Max064