Moin,
Ich würde gerne ein von mir in einen (memory) gezeichnetes Diagram als Bitmap abspeichern:
long MainDialog::SaveDiagram()
{
// TEMPORALY -\> PARAMETER
long picX = 500;
long picY = 500;
long bpp = 24;
// Fill in the bitmap structures
BITMAPFILEHEADER fileheader;
fileheader.bfType = 19778;
fileheader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + picX\*picY\*bpp/8;
fileheader.bfReserved1 = fileheader.bfReserved2 = 0;
fileheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
BITMAPINFOHEADER infoheader;
ZeroMemory(&infoheader, sizeof(BITMAPINFOHEADER));
infoheader.biSize = sizeof(BITMAPINFOHEADER);
infoheader.biWidth = picX;
infoheader.biHeight = picY;
infoheader.biPlanes = 1;
infoheader.biBitCount = bpp;
// Create a memory DC to draw in
HDC dc = GetDC(m\_hwnd);
HDC mem = CreateCompatibleDC(dc);
// Create a bitmap and link it to the memory dc
HBITMAP hbitmap = CreateCompatibleBitmap(mem, picX, picY);
// Draw the diagram
HBRUSH brush = CreateSolidBrush(RGB(0xff, 0x0, 0x0));
RECT screen;
screen.left = screen.top = 10;
screen.right = 490;
screen.bottom = 490;
FillRect(mem, &screen, brush);
DeleteObject(brush);
// Get the pixeldata
char\* bitmap = new char[picX\*picY\*bpp/8];
GetDIBits(mem, hbitmap, 0, 500, bitmap, (BITMAPINFO\*) &infoheader, DIB\_RGB\_COLORS);
// Do some cleanup
DeleteObject(hbitmap);
DeleteObject(mem);
ReleaseDC(m\_hwnd, dc);
// Create a file and write to it
HANDLE hfile = CreateFile("C:\\test.bmp", GENERIC\_WRITE, 0, NULL, OPEN\_ALWAYS, 0, 0);
DWORD written;
WriteFile(hfile, &fileheader, sizeof(BITMAPFILEHEADER), &written, NULL);
WriteFile(hfile, &infoheader, sizeof(BITMAPINFOHEADER), &written, NULL);
WriteFile(hfile, bitmap, picX\*picY\*bpp/8, &written, NULL);
// Free bitmap memory and release the file
delete[] bitmap;
CloseHandle(hfile);
return 0;
}
Die abgespeicherte Bitmap lässt sich zwar öffnen, einhält aber nur ein geometrisches Muster aus schwarzen und weissen Pixeln. Weiss jemand wo der Fehler liegt?
Danke im Vorraus,
Daniel Raffler