WinCE中显示32位色BMP文件的一种方法

简介: 前面介绍了如何显示资源中BMP图片的方法,这里补充一个显示32位色BMP图片文件的方法,并再次比较直接写显存与用GDI的区别。       首先将WinCE5.0的模拟器显示属性修改为480*272*32,并准备一张32位色的图片,如下图所示。

      前面介绍了如何显示资源中BMP图片的方法,这里补充一个显示32位色BMP图片文件的方法,并再次比较直接写显存与用GDI的区别。

      首先将WinCE5.0的模拟器显示属性修改为480*272*32,并准备一张32位色的图片,如下图所示。

                image

      使用直接写显存的方法,关键代码如下: 

1      DWORD dwRet;
2      HANDLE hFile  =  CreateFile(_T( " \\1.bmp " ),GENERIC_READ,NULL,NULL,OPEN_EXISTING,NULL,NULL);
3      dwFileSize  =  GetFileSize(hFile,NULL);
4      gbmpFileBuf  =  (BYTE * )LocalAlloc(LPTR,dwFileSize);
5      ReadFile(hFile,gbmpFileBuf,dwFileSize, & dwRet,NULL);    
6      gbmpFileBuf  +=   sizeof (BITMAPFILEHEADER) + sizeof (BITMAPINFOHEADER);
7      CloseHandle(hFile);
8 
9      memcpy(gpLCDBuf,gbmpFileBuf,dwBufSize);

       实际测试时发现,使用直接写显存的方法,比使用BitBlt和StretchDIBits都要快很多,截图如下:

                                                image

      需要注意,BMP图片在存储时通常是上下倒转的,所以在直接写显存可能会导致显示的图像出现上下倒转的情况,这个可以先将BMP图片文件倒转并修改其中BITMAPINFOHEADER的biHeight,以便直接写显存也能正着显示。biHeight对应BMP文件的第23~26字节,一般是将一个正值改为其负值对应的补码,如将272改从10 01 00 00为F0 FE FF FF。

      通过前面做的几个实验基本可以确定,直接写显存的效率应该还是要高一些,只是实际开发过程中如何方便的使用是需要考虑的一个问题,毕竟这几个实验使用的都是特定分辨率特定位色的BMP图片,而实际开发过程中的界面是复杂多变的。

目录
相关文章
|
8月前
|
存储 数据可视化
PS gif修改背景颜色(附加图片)
PS gif修改背景颜色(附加图片)
121 0
VC中GDI+双缓冲实现Picture控件中显示png图片
VC中GDI+双缓冲实现Picture控件中显示png图片
235 0
使用位图字体工具BMFont从图片生成自定义字体
上一篇转了别人的一篇文章,讲了BMFont的基本用法。对BMFont比较陌生的同学请点击这里先去学习:http://blog.csdn.net/keshuiyun/article/details/9960589。
1557 0
成功解决windows系统的视频格式文件不显示缩略图内容问题
成功解决windows系统的视频格式文件不显示缩略图内容问题
成功解决windows系统的视频格式文件不显示缩略图内容问题
|
C# Windows
WPF显示GIF图的几种方式
原文:WPF显示GIF图的几种方式 使用MediaElement   这种方式有一个局限就是图片路径必须是绝对路径   并且你还需要设置让他循环播放 private void MediaElement_MediaEnded(object sender, R...
3269 0