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

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

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

               

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

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);

9     memcpy(gpLCDBuf,gbmpFileBuf,dwBufSize);

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

                                               

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

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

时间: 2024-09-07 19:02:51

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

asp.net中显示DataGrid控件列序号的几种方法

asp.net|datagrid|datagrid控件|显示 asp.net中显示DataGrid控件列序号的几种方法 作者:郑佐 2004-9-10 在aps.net中多数据绑定的控件很多,论功能来说,应该属DataGrid最为齐全,但它没有提供现成的显示记录序号的功能,不过我们可以通过它所带的一些参数来间接得到序号,下面来看看怎样得到和显示序号值计算方式如下: (1)在后台 DataGrid.CurrentPageIndex * DataGrid.PageSize + e.Item.Item

颜色模式中8位,16位,24位,32位色彩是什么意思?会有什么区别?计算机颜色格式( 8位 16位 24位 32位色)【转】

转自:http://www.cnblogs.com/1175429393wljblog/p/5404626.html 颜色模式中8位,16位,24位,32位色彩是什么意思?会有什么区别简单地说这里说的位数和windows系统显示器设置中的颜色位数是一样的.表示的是能够显示出来的颜色的多少. 8位的意思是说,能够显示出来的颜色的数量有8位数.16.24都是一样的.24位的颜色数量已经很多了,叫做"真彩色",其实32位和24位颜色数量是一样多的.32位多出来的8位数是用来表示透明度信息的,

编程-给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数。

问题描述 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数. (在文件中至少缺失一个这样的数为什么?)括号里的话怎么得到的 在具有足够内存的情况下,如何解决该问题? 如果有几个外部的临时文件可以用,但是只有几百字节的内存,又该如何解决该问题. 解决方案 足够内存,用位图法.定义一个arr[4294967296]大小的数组,遍历顺序文件,遇到一个值,就把对应下标的置1,最后遍历这个数组,找0的元素. 解决方案二: 如果只有几百的内存,可以用hashtable.

在产品环境中使用32位Exchange 2007

Exchange Server 2007 用在产品环境中应该配置64位的硬件.一般说来,32位的Exchange 2007只能用于测试,评估或是训练.但这并不全对.在支持的方式中配置32位的版本(或简称E2K7/32)用来作为一个可用的服务器是可能的--只是在Exchange 2007上的功能会受到限制. 这里有一些简洁的纲要,这些纲要中列出了在32位版本的Exchange 2007中哪些可能实现,哪些不可能实现. 1.可用来管理其它64位的Exchange2007系统.安装了32位系统的win

如何在Win7/Win8中打开32位版IE10和IE11

  在64位操作系统中,有些程序会同时安装64位和32位,IE浏览器便是如此,有些时候某些插件不支持64位,我们只能开启32位版IE运行. 在IE7 ~ IE9版本下我们很容易就可以打开32位版,只需打开 C:Program Files (x86)Internet Exploreriexplore.exe 就是32位版的IE了. 听起来挺容易的,那为什么要写这篇文章呢? 因为!从 IE10 开始这件事变复杂了!微软把 32 位版跟 64 位版的 IE 一体化了!所以不管你是从 Program F

Shell脚本中引用、调用另一个脚本文件的2种方法

  这篇文章主要介绍了Shell脚本中引用.调用另一个脚本文件的2种方法,本文介绍了两种方法的语法,然后给出实际使用实例和一些要注意的地方,需要的朋友可以参考下 在Java,Python中,可以用import的方式来进行脚本或模块之间调用,例如: 代码如下: >>> import math >>> math.sqrt(4) 2.0 在Shell中要如何调用别的shell脚本,或别的脚本中的变量,函数呢? 方法一: . ./subscript.sh 方法二: source

C#中要从另一个软件的表格中读取数据,不借助文件,还有什么方法可以读取到?

问题描述 C#中要从另一个软件的表格中读取数据,不借助文件,还有什么方法可以读取到? C#中要从另一个软件的表格中读取数据,不借助文件,还有什么方法可以读取到? 解决方案 windpws api,如果是listview标准控件 readprocessmemory,直接读内存 解决方案二: 要么另一个软件给你提供接口数据..

可视化Swing中JTable控件绑定SQL数据源的两种方法深入解析

以下是对可视化Swing中JTable控件绑定SQL数据源的两种方法进行了详细的分析介绍,需要的朋友可以过来参考一下   在 MyEclipse 的可视化 Swing 中,有 JTable 控件. JTable 用来显示和编辑常规二维单元表. 那么,如何将 数据库SQL中的数据绑定至JTable中呢? 在这里,提供两种方法.JTable的构造方法通过查阅Java的API,可以可以得到JTable的两个重要的构造方法:JTable(Object[][] rowData, Object[] colu

win7系统如何打开csv文件|win7系统打开csv文件的两种方法

  win7系统如何打开csv文件|win7系统打开csv文件的两种方法.最近很多网友询问小编win7系统如何打开csv文件?csv文件是什么?CSV格式文件(逗号分隔值)是一种用来存储数据的纯文本文件,通常都是用于存放电子表格或数据的一种文件格式.那么win7系统如何打开csv文件?下面和大家分享下几种常用的CSV文件打开方法. 方法一:用写字板打开csv文件 1.不用任何软件,使用电脑中的写字板来打开csv文件.在电脑桌面,点击左下方的"开始",点击所有程序--附件--写字板; 2