相关网帖
1.[VC6] 图像文件格式数据查看器----http://www.cnblogs.com/hoodlum1980/archive/2010/09/05/1818308.html
创建WINCE下16位格式位图实现快速BitBlt
在WINCE下,如果创建的位图与屏幕设备格式不一样,将会导致BitBlt函数极为缓慢,因此需要创建一幅16位色565格式位图,用此方法创建出的位图可以提供1ms的快速BitBlt绘制。当然,如果设备不是565颜色格式的,更改代码中的颜色掩码位bmiColors就可以了。
- //
- ///@brief创建一幅缓存图像。
- ///@param[out]pHBitmap生成的位图句柄。
- ///@param[out]pData生成的位图中的数据位置。
- ///@param[in]hDC目标DC句柄。
- ///@param[in]width位图宽度。
- ///@param[in]height位图高度。
- ///@param[in]bitCount每个像素占多少个bit。
- ///@attention创建的位图是无压缩格式的。
- ///@authorLoongee
- ///@date2010/01/15
- //
- voidCreateBufferBitmap(HBITMAP*pHBitmap,void**pData,
- HDChDC,LONGwidth,LONGheight,WORDbitCount)
- {
- BITMAPINFO&bmpInfo=*(BITMAPINFO*)newBYTE[sizeof(bmpInfo)+sizeof(RGBQUAD)*3];
- bmpInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
- bmpInfo.bmiHeader.biWidth=width;
- bmpInfo.bmiHeader.biHeight=height;
- bmpInfo.bmiHeader.biPlanes=1;
- bmpInfo.bmiHeader.biBitCount=bitCount;
- if(bitCount==16)
- {
- bmpInfo.bmiHeader.biCompression=BI_BITFIELDS;
- *(DWORD*)(&bmpInfo.bmiColors[0])=0xF800;
- *(DWORD*)(&bmpInfo.bmiColors[1])=0x07E0;
- *(DWORD*)(&bmpInfo.bmiColors[2])=0x001F;
- }
- else
- {
- bmpInfo.bmiHeader.biCompression=BI_RGB;
- }
- bmpInfo.bmiHeader.biSizeImage=0;
- bmpInfo.bmiHeader.biXPelsPerMeter=1000;
- bmpInfo.bmiHeader.biYPelsPerMeter=1000;
- bmpInfo.bmiHeader.biClrUsed=0;
- bmpInfo.bmiHeader.biClrImportant=0;
- *pHBitmap=CreateDIBSection(hDC,&bmpInfo,DIB_RGB_COLORS
- ,pData,NULL,0);
- delete[](BYTE*)&bmpInfo;
- }
http://blog.csdn.net/loongee/article/details/6333489
//==============================================================
备注::
1>必须注意要BITMAPINFO&bmpInfo=*(BITMAPINFO*)newBYTE[sizeof(bmpInfo)+sizeof(RGBQUAD)*3];要不然后面的*(DWORD*)(&bmpInfo.bmiColors[0])=0xF800;没有存储的空间,也传不进创建DIB的函数里面去----这样会造成DEBUG跟RELEASE版本不一样,我就被这个痛苦地折腾了一回,得有个记性了。