Bilder als bmp wegschreiben!!
-
Hallo,
ich habe ein Problem beim wegschreiben von Bilder hier die FunktionWriteBitmap("C:\\Datei1.bmp",(HBITMAP) bitmap,*pDC);
So funktioniert alles nur wenn ich
CSting test ="C:\\Datei2.bmp";
in
WriteBitmap(test,(HBITMAP) bitmap,*pDC);
einfüge geht das leider nicht warum weis ich nicht bitte um Hilfe!!!
bool CViewerDlg::WriteBitmap(LPTSTR szFile, HBITMAP hbitmap, HDC memdc) { BITMAP bmp; if(GetObject(hbitmap, sizeof(BITMAP), &bmp)) { BITMAPINFOHEADER BmpInfoHdr; BITMAPFILEHEADER BmpFileHdr; BmpInfoHdr.biSize = sizeof(BITMAPINFOHEADER); BmpInfoHdr.biWidth = bmp.bmWidth; BmpInfoHdr.biHeight = bmp.bmHeight; BmpInfoHdr.biPlanes = bmp.bmPlanes; BmpInfoHdr.biBitCount = 24; BmpInfoHdr.biCompression = BI_RGB; BmpInfoHdr.biSizeImage = bmp.bmWidth*bmp.bmHeight*3; BmpFileHdr.bfType = 0x4d42; BmpFileHdr.bfReserved1 = 0; BmpFileHdr.bfReserved2 = 0; BmpFileHdr.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof (BITMAPINFOHEADER); BmpFileHdr.bfSize = BmpFileHdr.bfOffBits+BmpInfoHdr.biSizeImage; bmp.bmBits = (void*)GlobalAlloc(GMEM_FIXED, BmpInfoHdr.biSizeImage); if(GetDIBits(memdc, hbitmap, 0, BmpInfoHdr.biHeight, bmp.bmBits, (BITMAPINFO*)&BmpInfoHdr, DIB_RGB_COLORS) == BmpInfoHdr.biHeight) { HANDLE hFile = CreateFile(szFile, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL); if(hFile != INVALID_HANDLE_VALUE) { DWORD dwTmp; WriteFile(hFile, &BmpFileHdr, sizeof(BITMAPFILEHEADER), &dwTmp, NULL); WriteFile(hFile, &BmpInfoHdr, sizeof(BITMAPINFOHEADER), &dwTmp, NULL); WriteFile(hFile, bmp.bmBits, BmpInfoHdr.biSizeImage, &dwTmp, NULL); } CloseHandle(hFile); } GlobalFree(bmp.bmBits); return TRUE; } return FALSE; }
-
Versuch es mal so
CSting test ="C:/Datei2.bmp";
-
hi,
ne das geht leider auch nicht
-
Ist nur eine Kleinigkait aber hast Du CSting in deinem Programm stehen oder CString
eigentlich muesste die von Dir aufgefuehrte variante funzen denke ich...
Helge.
-
test.GetBuffer(...) beim Aufruf von WriteBitmap(...) sollte klappen, der gibt ein LPTSTR zurück.
Und test.ReleaseBuffer nicht vergessen.
-
hallo,
wie geht das bin new in VC++ bitte mit BSP
-
Ich habe noch einen Fehler bei Dir entdeckt:
BmpInfoHdr.biSizeImage = bmp.bmWidth*bmp.bmHeight*3;
Die Zeile muß immer durch 4 teilbar sein, dadurch verändert sich dann auch die Größe der Image-Size. Besser wäre:
BmpInfoHdr.biSizeImage = ((((bmp.bmWidth * BmpInfoHdr.biBitCount) + 31) & ~31) >> 3) * bmHeight;
-
Wozu das GENERIC_READ?