您的位置:首页 > 其它

创建WINCE下16位格式位图实现快速BitBlt

2012-09-25 21:47 253 查看
原文地址::http://dev.wo.com.cn/bbs/post.jsp?action=reply&flag=-1004448091&fid=25136&tid=121121&extra=page%3D1&page=10

相关网帖

1.[VC6] 图像文件格式数据查看器----http://www.cnblogs.com/hoodlum1980/archive/2010/09/05/1818308.html


创建WINCE下16位格式位图实现快速BitBlt

在WINCE下,如果创建的位图与屏幕设备格式不一样,将会导致BitBlt函数极为缓慢,因此需要创建一幅16位色565格式位图,用此方法创建出的位图可以提供1ms的快速BitBlt绘制。当然,如果设备不是565颜色格式的,更改代码中的颜色掩码位bmiColors就可以了。

view plain

//////////////////////////////////////////////////////////////////////////

///@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版本不一样,我就被这个痛苦地折腾了一回,得有个记性了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: