创建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下,如果创建的位图与屏幕设备格式不一样,将会导致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版本不一样,我就被这个痛苦地折腾了一回,得有个记性了。
相关网帖
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版本不一样,我就被这个痛苦地折腾了一回,得有个记性了。
相关文章推荐
- 创建WINCE下16位格式位图实现快速BitBlt
- 创建WINCE下16位格式位图实现快速BitBlt
- WINCE 半透明及透明位图的实现技术
- WinCE上BINFS实现详解(快速启动Wince)
- wince程序防止创建多个实例实现互斥作用
- 位图文件(BMP)格式分析以及程序实现
- DirextX9之2D编程 通过16位色位图创建背景透明的纹理
- 使用BitBlt实现位图背景透明
- 【转】libjpeg实现内存位图的压缩及解压缩-显示格式有问题
- 位图文件(BMP)格式以及Linux下C程序实现
- bmp文件格式中rgb555与rgb888之间的转换,24位与16位位图的转换
- WINCE 半透明及透明位图的实现技术
- asp.net导出excel-一行代码实现excel、xml、pdf、word、html、csv等7种格式文件导出功能而且美观-SNF快速开发平台
- 在网页上实现任意格式的音视频快速播放功能的开发总结。
- VB用Bitblt实现透明位图显示
- 位图文件(BMP)格式以及Linux下C程序实现
- 安卓学习笔记之AlertDialogUtils实现快速创建自定义AlertDialog
- bmp文件格式中rgb555与rgb888之间的转换,24位与16位位图的转换
- MFC动态创建按钮,并在按钮上实现位图的切换显示
- MFC中位图按钮的实现方法:( 位图必须用.bmp 格式的)