Wince快速贴图探讨

最近做手持机应用程序开发,小设备,需要好看的界面.我追求效率但是不追求华丽.这次不同,领导要求我也追求一次华丽吧.

 

华丽的同时我也要追求效率.首先我想到ddraw.写了个程序上去结果死机,后来问PDA提供商,他们机器驱动不支持.

 

换用普通的方法:创建兼容DC,然后加载位图,把位图选入图形兼容DC,然后在全屏的窗体上贴图.这要做对于我这个设备来说24位位图用时10ms,RGBX555用时10ms,RGB565贴图失败.后经过研究发现PS导出的位图版本并非是第二版的位图格式.也许我的设备驱动问题,我在另外两个设备上实验都通过.使用RGB565贴图速度应该是最快的.

 

让贴图更加快一点,使用双缓冲.建立两个兼容DC,DC1,DC2建立一个和屏幕一样大小的兼容位图,然后加载位图,把加载位图选入DC1,把兼容位图选入DC2.把DC1中的位图贴到DC2上,然后.把DC2上的位图贴到屏幕上,这样做就是吧位图转换成了和屏幕像素一样的位图.在我的设备上速度小于2ms.当然完成DC1贴图到DC2的过程后就可以释放DC1和加载的位图.

 

还有一种使用StretchDIBits函数,

http://www.cnblogs.com/we-hjb/archive/2010/02/09/1666778.html

我从这里找到的,这个函数的速度够快,在我设备上用时2ms,但是要处理图像颠倒和准备系统目标格式位图一般都是RGB565,操作起来比较麻烦.

 

上诉博客中的强人也说直接写缓冲,我计算了一下,如果直接写缓冲,对于16位的位图,533Mcpu用汇编编写代码,优化后,移动每四个字节需要,需要两条汇编指令,完成整个移动应该0.2ms都用不了.这个就没有这个必要了,因为屏幕刷新周期都到不了这个速度.

 

后来我在不同设备上面测试,他们的效率是不同的,其中使用双缓冲的效率一直是最好的,在没有图形加速的情况下,使用StretchDIBits和双缓冲效率相等,直接写屏我没有试验过,只是用来内存块移动来试验,用时小于1ms.在有图像加速的情况下双缓冲比StretchDIBits的效率高约20倍不止.所以还是推荐用双缓冲,当然有支持ddraw的情况下用ddraw做界面还是不错的选择.

转载于:https://www.cnblogs.com/baili35/archive/2010/07/26/fast_bitblt.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值