3160|3

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

问一个windowsmobile 下用c#实现双缓冲的效率问题,兼bitblt用法的讨论 [复制链接]

把所有的要画的元素都事先画在了一个bitmap里面,在onPiant()方法里面使用 e.Graphics.drawImage(bitmap,0,0)
发现速度不是一般的慢.后来查看资料,c#下面使用的是gdi+,在绘制过程中,双缓冲只能解决闪烁问题,无法解决效率问题.后来又想采用bitblt的方式,可是在以下代码会出现错误
System.Drawing.Graphics g = e.Graphics;

System.Drawing.Graphics gra = System.Drawing.Graphics.FromImage(buf);//buf就是要绘制的图了

                 IntPtr hdc = gra.GetHdc();//这句会报值不在预期范围内的错误
dstHdc = g.GetHdc();

                       BitBlt(dstHdc, 0, 0, buf.Width, buf.Height, hdc, 0, 0, DeviceScreen.RasterOperation.SRC_COPY);
                g.ReleaseHdc(dstHdc);

不知道是哪里的应用有问题,该如何提高绘制的效率呢

最新回复

多谢二位,目前没找到比较好的办法来解决效率问题,因为是直接绘制的240x320的图,应该对效率有比较大的影响.不过找不到比较好的方式来改变图的大小 现在打算用c++重写这里部分的代码,试试directx会不会对效率有所提升  详情 回复 发表于 2009-4-23 10:37
点赞 关注

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
直接写缓冲区也许是效率最高的,但是这样会闪烁。
如果多个显示缓冲区,先写到备用缓冲区,然后再通过控制切换显示缓冲区,这样可以达到效率和防闪烁同时解决的效果。
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
就GDI来说,最高的效率就是直接往设备DC上绘图了,但这样会产生闪烁!
楼上说的对,双缓冲只能解决闪烁问题(当然,如果刷新频率高,数据量大,还是会闪烁的)。
所以要想在GDI下提高效率,可能的办法是在BitBlt之前,尽量减小RECT区域的面积,多加些判断会收到很好的效果!
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

4
 
多谢二位,目前没找到比较好的办法来解决效率问题,因为是直接绘制的240x320的图,应该对效率有比较大的影响.不过找不到比较好的方式来改变图的大小
现在打算用c++重写这里部分的代码,试试directx会不会对效率有所提升
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表