DeviceContext Abspeichern
-
Hallo,
ich schreibe grad ein Programm, bei dem auf einem Device Context verschiedene Zeichenoperationen durchgeführt werden (bin Anfänger). Dazu bin ich folgendermaßen vorgegangen:
wxPaintDC dc(this); //Erzeugen des DC ... dc.SetPen(wxPen(wxColour(r,g,b))); dc.DrawPoint(x,y); //Zeichnen eines Punktes
Nun möchte ich den Device-Context dc in einer Bilddatei abspeichern. Wie muss ich hierbei vorgehen? Könnt ihr einen Beispielcode posten?
Danke!
-
Am besten du gibst der Klasse eine Methode void Draw(wxDC& dc).
Darin Zeichnest du immer alles. Von OnPaint kannst du sie mit einem wxPaintDC aufrufen,
und wenn du es als Bild speichern willst, nimmst du einfach einen wxMemoryDC.
-
Hallo,
wie speichert man das Bild mit dem wxMemoryDC genau ab? Hast du ein Codebeispiel para?
mfg
-
http://wxwidgets.org/manuals/stable/wx_wxmemorydc.html#wxmemorydc
Da steht eigentlich alles. Und mit wxImage kannst du es dann als Bild speichern.
-
hmm,
soweit ich dich verstanden haben erzeugt man einen wxMemoryDC und führt darauf seine Zeichenoperationen durch, alsowxMemoryDC dc; dc.DrawPoint(x,y);
Dann erzeugt man ein wxImage:
wxImage image; image.SaveFile(wxT(“image.png”)), wxBITMAP_TYPE_PNG);
Aber wie speichert man nun den obigen DeviceContext in das Bild?
-
Dazu müsstest du dir die Klasse MemoryDC mal genauer anschauen...
-
Hallo,
ich habe jetzt mal folgendes versucht:wxMemoryDC memDC; wxBitmap bitmap(700, 700); ... memDC.SetPen(wxPen(wxColour(r,g,b))); memDC.DrawPoint(x,y); wxImage image = bitmap.ConvertToImage(); image.SaveFile(wxT("image.bmp"),wxBITMAP_TYPE_BMP);
Dieser Code kompiliert fehlerfrei, liefert aber ein total verrauschtes Bild. Was hab ich falsch gemacht?
-
phlox81 schrieb:
Dazu müsstest du dir die Klasse MemoryDC mal genauer anschauen...
Zarathustra schrieb:
Hallo,
ich habe jetzt mal folgendes versucht:wxBitmap bitmap(700, 700); wxMemoryDC memDC(bitmap); memDC.SetPen(wxPen(wxColour(r,g,b))); memDC.DrawPoint(x,y); wxImage image = bitmap.ConvertToImage(); image.SaveFile(wxT("image.bmp"),wxBITMAP_TYPE_BMP);
Dieser Code kompiliert fehlerfrei, liefert aber ein total verrauschtes Bild. Was hab ich falsch gemacht?
-
Ah ich habs, danke schön. Es hatte nur noch die Anwendung von SelectObjectAsSource gefehlt. D
Danke Schön!
-
Meine Lösung:
wxSize size = this->GetSize(); wxMemoryDC mdc; wxBitmap bitmap(size.x, size.y); mdc.SelectObject(bitmap); Draw(mdc); wxImage image = bitmap.ConvertToImage(); image.SaveFile(wxT("image.bmp"),wxBITMAP_TYPE_BMP);
Es funktioniert soweit. Hast du noch Verbesserungsvorschläge?
-
Meine Lösung:
wxSize size = this->GetSize(); wxBitmap bitmap(size.x, size.y); wxMemoryDC mdc(bitmap); Draw(mdc); wxImage image(bitmap) image.SaveFile(wxT("image.bmp"),wxBITMAP_TYPE_BMP);
phlox
-
..
-
wxImage(const wxBitmap& bitmap)
(Deprecated form, use wxBitmap::ConvertToImage instead.) Constructs an image from a platform-dependent bitmap. This preserves mask information so that bitmaps and images can be converted back and forth without loss in that respect.
Mit freundlichsten Grüßen
Oh, hatte das andersrum in Erinnerung. Gut zu wissen
phlox