000
09.07.2007, 15:06 Uhr
muck2000
|
Hallo,
mit folgendem Code generiere ich einen Screenshot und speichere diesen ab:
C++: |
bool CPSDlg::Screenshot(CWnd* pWnd) { CWindowDC CWndDC(pWnd); CDC CMemDC; CMemDC.CreateCompatibleDC(&CWndDC); CRect CClientRect; CClientRect.left = CClientRect.top = 0; CClientRect.right = ::GetSystemMetrics(SM_CXSCREEN); CClientRect.bottom = ::GetSystemMetrics(SM_CYSCREEN); CBitmap CShotBmp; CShotBmp.CreateCompatibleBitmap(&CWndDC, CClientRect.Width(),CClientRect.Height());
CMemDC.SelectObject(&CShotBmp); CMemDC.BitBlt(0,0,CClientRect.Width(),CClientRect.Height(),&CWndDC,0,0,SRCCOPY);
BITMAP bitmap; CShotBmp.GetBitmap(&bitmap); int size = bitmap.bmWidth*bitmap.bmHeight*bitmap.bmBitsPixel/8; BYTE *lpBits = new BYTE[size]; GetBitmapBits((HBITMAP)CShotBmp,size,lpBits); WriteBmp(&bitmap,(int*)lpBits);
return true; }
void CPSDlg::WriteBmp(BITMAP *bmp, int* data) { BITMAPINFO Bmi; memset(&Bmi,0,sizeof(BITMAPINFO)); Bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); Bmi.bmiHeader.biWidth = bmp->bmWidth; Bmi.bmiHeader.biHeight = bmp->bmHeight; Bmi.bmiHeader.biPlanes = 1; Bmi.bmiHeader.biBitCount =bmp->bmBitsPixel; Bmi.bmiHeader.biCompression = BI_RGB; Bmi.bmiHeader.biSizeImage = bmp->bmHeight*bmp->bmWidth*bmp->bmBitsPixel/8;
FILE* image = fopen ("C:\\Test.bmp","wb"); if(image==0) return; int h = abs(Bmi.bmiHeader.biHeight); int w = abs(Bmi.bmiHeader.biWidth); Bmi.bmiHeader.biHeight=-h; Bmi.bmiHeader.biWidth=w; int sz = Bmi.bmiHeader.biSizeImage;
BITMAPFILEHEADER bfh; bfh.bfType=('M'<<8)+'B'; bfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); bfh.bfSize=sz+bfh.bfOffBits; bfh.bfReserved1=0; bfh.bfReserved2=0; fwrite(&bfh,sizeof(bfh),1,image); fwrite(&Bmi.bmiHeader,sizeof(BITMAPINFOHEADER),1,image); fwrite(data,sz,1,image); fclose(image); }
|
Funktioniert "fast" wunderbar. Bei 32bit Auflösung ist alles OK, bei 16bit hat das ganze einen Blaustich, und bei 8bit ist es nur noch weiß.
Wie bekomme ich das bei 16bit bzw. 8bit ordenlich gelöst?
Im Voraus vielen Dank. Gruss Sven -- Nimm das Leben nicht so ernst, da es eine Sache ist aus der Du eh nicht lebend raus kommst! |