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

 转载自we-hjb的BLOG,原文地址:http://www.cnblogs.com/we-hjb/archive/2010/02/10/1667229.html

 

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

                image

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

     DWORD dwRet;
     HANDLE hFile = CreateFile(_T("\\1.bmp"),GENERIC_READ,NULL,NULL,OPEN_EXISTING,NULL,NULL);
     dwFileSize = GetFileSize(hFile,NULL);
     gbmpFileBuf = (BYTE*)LocalAlloc(LPTR,dwFileSize);
     ReadFile(hFile,gbmpFileBuf,dwFileSize,&dwRet,NULL);    
     gbmpFileBuf += sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
     CloseHandle(hFile);
 
     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图片,而实际开发过程中的界面是复杂多变的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值