想问一个关于全屏幕动画效率的问题
这段时间我在写一个图形动画引擎,是基于GDI来写的,但是感觉效果不是很好。我的这个引擎实现的方式大致是这样的。我创建了一个GDI设备(包括位图、刷子、字体什么的都设置好了),然后自己加载了几个位图数据到内存(这里的内存是指一个结构体数组,结构体包含图形资源的宽度、高度、具体符合GDI数据规范的数据指针等)。然后再添加图层(也是一个结构体数组),结构体包含图层的坐标、宽度、资源指针等。因为想引擎支持透明和半透明的资源,所以位图资源都采用32位的位图作为基础,分别是R、G、B、透明度这样的结构。因为涉及到运算,所以我就创建了一块与GDI设备数据大小相符的内存区域来实现这种图形运算,然后再用 SetBitmapBits 把处理好的内存数据设置到位图,然后再用Bitblt刷到窗口中。
我用了一个线程来专门轮询内存像素的每一个点,合并识别底图、以及每一个图层的数据,然后还用了一个线程来刷图。虽然最终效果是可以实现了,但是感觉速度上不能满足我的需求。在800*600的分辨率下,效果勉强可以接受,但在1366*768的情况下,动画效果就会很差,会卡。后来我就改了一下,采用了30个线程分块区运算,6*5个块区,虽然速度有所提升,但动画效果会根据块区线程的速度而脱节。之后我又改成了隔行扫描的方式,用了两个线程,一个处理单行数据,一个处理双行数据,效果还可以,速度上来一点,不过当动起来的时候,会有一条一条的扫描线影子。还有,我的程序是用VC写的,理论上循环运算效率应该是很快了的呀。
我想问一下,在这种全屏图形,有多个支持透明度调整的图层环境,用GDI作为基础,怎样才能更好的处理效果和效率方面呢?
我用了一个线程来专门轮询内存像素的每一个点,合并识别底图、以及每一个图层的数据,然后还用了一个线程来刷图。虽然最终效果是可以实现了,但是感觉速度上不能满足我的需求。在800*600的分辨率下,效果勉强可以接受,但在1366*768的情况下,动画效果就会很差,会卡。后来我就改了一下,采用了30个线程分块区运算,6*5个块区,虽然速度有所提升,但动画效果会根据块区线程的速度而脱节。之后我又改成了隔行扫描的方式,用了两个线程,一个处理单行数据,一个处理双行数据,效果还可以,速度上来一点,不过当动起来的时候,会有一条一条的扫描线影子。还有,我的程序是用VC写的,理论上循环运算效率应该是很快了的呀。
我想问一下,在这种全屏图形,有多个支持透明度调整的图层环境,用GDI作为基础,怎样才能更好的处理效果和效率方面呢?
...全文
相关推荐
一个VB版的全屏幕区域找图找色源码
标题中的“一个VB版的全屏幕区域找图找色源码”指的是使用Visual Basic (VB)编程语言编写的程序,该程序能够实现全屏搜索指定的图像或颜色。
使用全屏幕贴图,游戏里边经常用
这个技术允许开发者将一个图像或一部分图像覆盖到整个屏幕或者目标图像上,以此来实现各种视觉效果,如后处理效果、过渡动画、滤镜等。
全屏幕秒表倒计时软件
在需要高度集中注意力的场合,如健身训练和演讲练习,全屏模式能够帮助用户更好地跟踪时间进度,从而提高效率和专注度。在软件的易用性和便携性方面,全屏幕秒表倒计时软件也显示出了明显的优势。
全屏幕秒表、倒计时、系统时钟、读秒软
综上所述,这款集成了多种时间管理工具的软件,无疑是那些希望提升时间管理效率的用户的理想选择。
全屏幕 秒表倒计时程序
由此,一个实用的全屏幕秒表倒计时程序便成为了提升时间管理能力的得力助手。


多媒体
