bild speichern
-
hi leute!
ich zeichne mit mit
void CMFC_1View::OnDraw(CDC* pDC)
kreise in einer mfc anwendung...
nun will ich die als .bmp speichern....es gibt ja eine CImage klasse...
HDC hdc = ::GetDC(GetSafeHwnd()); image.Attach((HBITMAP)hdc); // save an image in BMP format, even though jpg file extension is used image.Save("c:\image.jpg");
nun funzt das nicht...bzw hab das nicht ganz verstanden mit dem GetDC....
bitte um rat und tat..
cu
-
image.Save("c:\image.jpg");
->
image.Save("c:****image.jpg");
-
hi!
den DC muss ich ja erst holen:
void CMFC_1View::OnBildSpeichern() { // TODO: Add your command handler code here HWND hwnd = GetSafeHwnd(); HDC hdc = ::GetDC(hwnd); image.Attach((HBITMAP)hdc); // save an image in BMP format, even though jpg file extension is used image.Save("c:\image.jpg"); }
und dabei mach ich etwas falsch....in der
inline void CImage::UpdateBitmapInfo( DIBOrientation eOrientation )
tritt eine Exception auf;-(
cu
-
Attach((HBITMAP)hdc);
Das sollte doch schonmal nen Fehler sein.
-
wüsste nciht was da falsch sein sollte, compiler meckert nicht!!
cu
-
lol.
Es wird ein HBITMAP, ein Handle auf ein Bitmap erwartet. Du gibst ihm aber einen HDC, ein Handle auf einen DeviceContext.
-
hm....weiss nicht recht wie man das machen soll...;-(
cu
-
musst ggf. eine Bitmap erstellen und das hdc da rein kopieren?
oder lieber CDC nehmen, wenn ja wie?cu
-
CreateCompatibleBitmap würde ich nehmen um von HDC auf HBITMAP zu kommen.
-
GetCurrentObject wäre vielleicht auch eine Möglichkeit.
-
hi!
HWND hwnd = GetSafeHwnd(); HDC hdc = ::GetDC(hwnd); HBITMAP memBM = CreateCompatibleBitmap ( hdc, 200, 200 ); image.Attach(memBM); // save an image in BMP format, even though jpg file extension is used image.Save("c:\\image.jpg");
es wird nun ein bild gespeichert...das ist aber nur schwarz...was nicht sein kann, denn ich zeichne:
cu
-
hi!
HWND hwnd = GetSafeHwnd(); HDC hdc = ::GetDC(hwnd); HBITMAP memBM = CreateCompatibleBitmap ( hdc, 200, 200 ); image.Attach(memBM); // save an image in BMP format, even though jpg file extension is used image.Save("c:\\image.jpg");
es wird nun ein bild gespeichert...das ist aber nur schwarz...was nicht sein kann, denn ich zeichne:
cu
-
Du kopierst ja nirgendwo den inhalt des Bildschirms in dein Bild.
-
sorry CreateCompatibleBitmap war wohl dann falsch.
-
[url]www.gerii.com/bild.png [/url]
den ganzen bildschirm brauch ich ja nicht...nur die ganze zeichenfläche von oben, gibs da nicht was spezielles? hm...
cu
-
Meinen Vorschlag mit GetCurrentObject schon getestet?
-
ja, aber da ging was schief beim casten;-(
cu
-
hilft das? hab ich im internet gefunden.
HBITMAP CopyScreenToBitmap() { HDC hScrDC, hMemDC; HBITMAP hBitmap, hOldBitmap; int nX, nY, nX2, nY2; int nWidth, nHeight; hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL); hMemDC = CreateCompatibleDC(hScrDC); nX = 0; nY = 0; nX2 = GetDeviceCaps(hScrDC, HORZRES); nY2 = GetDeviceCaps(hScrDC, VERTRES); nWidth = nX2 - nX; nHeight = nY2 - nY; hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight); hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap); BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY); hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap); DeleteDC(hScrDC); DeleteDC(hMemDC); return hBitmap; }
-
hi!
funzt nun, macht aber einen sceenshoot des ges. bildschirmes...wie kann ich sicher stellen das nur die bildfläche auf der ich zeichnen kann gespeichert wird? ich dank mal das muss einfacher gehn...?
cu
-
#include <hirn.h>