Gdi & GetDIBits的 ?T
BITMAP bitmap;
BITMAPINFO bitmapinfo;
HWND hwnddesktop=GetDesktopWindow();
HDC hdcdesktop=GetWindowDC(hwnddesktop);
HDC hdcmem=CreateCompatibleDC( hdcdesktop);
HBITMAP hbitmapdesktop=(HBITMAP)GetCurrentObject(hdcdesktop,OBJ_BITMAP);
GetObject(hbitmapdesktop, sizeof(BITMAP), (LPSTR)&bitmap);
bitmapinfo.bmiHeader.biPlanes=bitmap.bmPlanes; bitmapinfo.bmiHeader.biBitCount=bitmap.bmBitsPixel;
bitmapinfo.bmiHeader.biCompression =BI_RGB;
bitmapinfo.bmiHeader.biSize =sizeof(BITMAPINFOHEADER);
bitmapinfo.bmiHeader.biWidth =bitmap.bmWidth;
bitmapinfo.bmiHeader.biHeight = bitmap.bmHeight;
bitmapinfo.bmiHeader.biClrImportant=0;
bitmapinfo.bmiHeader.biClrUsed=0;
bitmapinfo.bmiHeader.biSizeImage = ((bitmapinfo.bmiHeader.biWidth *24 +31) & ~31) /8 *bitmapinfo.bmiHeader.biHeight;
HANDLE hheap=GetProcessHeap();
COLORREF* colors=(COLORREF*)HeapAlloc(hheap,HEAP_ZERO_MEMORY,bitmap.bmWidth*bitmap.bmHeight*4);
hbitmapdesktop=CreateCompatibleBitmap(hdcdesktop,bitmap.bmWidth,bitmap.bmHeight);
SelectObject(hdcmem,hbitmapdesktop);
GetDIBits(hdcmem,hbitmapdesktop,0,bitmap.bmHeight,colors,&bitmapinfo,DIB_RGB_COLORS);
… …
… …
代码如上
忙了好久 函数换了x遍 最终colors指向的内存块还是零
原来的程序 GetDIBits都正常工作
是我精神状态不好还是GDI要逗我~
崩溃边缘
还有就是 当bitmap.bmWidth和bitmap.bmHeight较大时
内存分配bitmap.bmWidth*bitmap.bmHeight*4时总是冲突 换bitmap.bmWidth*bitmap.bmHeight*5就OK了
怎么会这样 COLORREF就是4啊~
累死人了~