HANDLE CBmp2Avi::Bitmap2Dib( HBITMAP hbitmap, UINT bits ) { HANDLE hdib ; HDC hdc ; BITMAP bitmap ; UINT wLineLen ; DWORD dwSize ; DWORD wColSize ; LPBITMAPINFOHEADER lpbi ; LPBYTE lpBits ; GetObject(hbitmap,sizeof(BITMAP),&bitmap) ; wLineLen = (bitmap.bmWidth*bits+31)/32 * 4; wColSize = sizeof(RGBQUAD)*((bits <= 8) ? 1<<bits : 0); dwSize = sizeof(BITMAPINFOHEADER) + wColSize + (DWORD)(UINT)wLineLen*(DWORD)(UINT)bitmap.bmHeight; hdib = GlobalAlloc(GHND,dwSize); if (!hdib) return hdib ; lpbi = (LPBITMAPINFOHEADER)GlobalLock(hdib) ; lpbi->biSize = sizeof(BITMAPINFOHEADER) ; lpbi->biWidth = bitmap.bmWidth ; lpbi->biHeight = bitmap.bmHeight ; lpbi->biPlanes = 1 ; lpbi->biBitCount = (WORD) bits ; lpbi->biCompression = BI_RGB ; lpbi->biSizeImage = dwSize - sizeof(BITMAPINFOHEADER) - wColSize ; lpbi->biXPelsPerMeter = 0 ; lpbi->biYPelsPerMeter = 0 ; lpbi->biClrUsed = (bits <= 8) ? 1<<bits : 0; lpbi->biClrImportant = 0 ; lpBits = (LPBYTE)(lpbi+1)+wColSize ; hdc = CreateCompatibleDC(NULL) ; GetDIBits(hdc,hbitmap,0,bitmap.bmHeight,lpBits,(LPBITMAPINFO)lpbi, DIB_RGB_COLORS); lpbi->biClrUsed = (bits <= 8) ? 1<<bits : 0; DeleteDC(hdc) ; GlobalUnlock(hdib); return hdib ; } CMemFile* memF= (CMemFile*)GlobalLock(Bitmap2Dib(hbm, 8)); |
fanxuehai 于 2005-5-11 21:02:38 |
多谢howtotell(从何谈起)的指点,我用你提供的源码试了一下,编译是通过了的,但一执行就出现“死机”(程序死了)的现象,不知是我在哪里出现偏差? |
fanxuehai 于 2005-5-13 16:57:15 |
谁能帮我解决这个问题啊?急啊。。。 |
dongfa(一桶江湖) 于 2005-5-13 17:07:48 |
要new CMemFile CMemFile* memF = new CMemFile(GlobalLock(Bitmap2Dib(hbm, 8))); |
bobob(静思--潜心研究PDF) 于 2005-5-13 17:13:49 |
指定memfile的size 就是上面函数中的dwSize |
fanxuehai 于 2005-5-13 18:28:11 |
还是没能有问题啊! |
fanxuehai 于 2005-5-13 19:46:46 |
有一点我就不明白:GlobalLock返回值类型为void,将它强制转化为CMemFile型,这样这个能将位图内容存进内存文件(CMemFile对象)吗? |
fanxuehai 于 2005-5-13 20:04:02 |
我刚才测试了一下,用CMemFile* memF= new CMemFile((int)GlobalLock(Bitmap2Dib(hBitmap, 8)))得到的memF文件的长度为0,内存文件为空,这是什么原因呢?敬请指教! |
dongfa(一桶江湖) 于 2005-5-13 20:09:26 |
HANDLE hData = Bitmap2Dib(hBitmap, 8); UINT nSize = GlobalSize(hData); CMemFile* memF= new CMemFile((BYTE *)GlobalLock(hData), nSize); |
fanxuehai 于 2005-5-15 17:59:28 |
谢谢大家!:) |