|
|

楼主 |
发表于 2007-5-25 10:52:00
|
显示全部楼层
Re:问一吓``怎样将surface里的数据最快的转成hbitmap?
HRESULT ddrval = ((LPDIRECTDRAWSURFACE7)pDxAppInfos->m_pPrimarySurface)->Lock( NULL, &ddsd, DDLOCK_WAIT, NULL );
// 位图文件头
BITMAPFILEHEADER bmfHdr;
// 位图信息头
BITMAPINFOHEADER bi;
DWORD dwBitsSize = 0;
DWORD dwWriten = 0;
bi.biBitCount = ddsd.ddpfPixelFormat.dwRGBBitCount;
bi.biClrImportant = 0;
bi.biClrUsed = 0;
bi.biCompression = BI_RGB;
bi.biHeight = ddsd.dwHeight;
bi.biWidth = ddsd.dwWidth;
bi.biPlanes = 1;
bi.biSize = sizeof(bi);
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
dwBitsSize = ((ddsd.dwHeight * ddsd.ddpfPixelFormat.dwRGBBitCount + 31) / 32) * 4 * ddsd.dwHeight;
HANDLE hFile = CreateFile(szPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
bmfHdr.bfType = 0x4d42;
bmfHdr.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwBitsSize;
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER);
WriteFile(hFile, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWriten, NULL);
WriteFile(hFile, ddsd.lpSurface, dwBitsSize, &dwWriten, NULL);
CloseHandle(hFile);
((LPDIRECTDRAWSURFACE7)pDxAppInfos->m_pPrimarySurface)->Unlock(NULL);
上面那段代码保存出来的图片是错误的..用windows自带的图片浏览器看不了
|
|