c#的一个绘图方法竟然比c++的快,求解~~

liangxd09 2010-07-07 09:23:26
加精
对c#不太熟悉。贴一个800*480的图片,c#有个方法比较快,那就是用gdi+。
测试环境为环境 WM(WVGA)。

语言 方法 时间
c++ gdi 200ms
c++ gdi+ 600ms
c# gdi+ 50ms

关键代码,
c++: bitblt,网上的LibGDIPlus.lib强制使用gdi+
c#: this.Graphics.DrawImage(this.Bitmap, 0, 0)。
上面为模拟器的测试数据,真机也差别多,会小点,但差别还是这么大,c#的快许多。

猜测:ms在.net做手脚,gdi+本来就比较慢,所以可能里面有写屏的操作。

不知道原因,所以向各位大大求解。
...全文
3860 115 打赏 收藏 转发到动态 举报
写回复
用AI写文章
115 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lucky_HJH 2010-07-13
  • 打赏
  • 举报
回复
谢谢LZ的分享
rxklc 2010-07-12
  • 打赏
  • 举报
回复
谁说c#的方法就一定比c++差啊
a49494148 2010-07-11
  • 打赏
  • 举报
回复
好。。。。。我路过。。。。。不懂
xxfxiazai 2010-07-10
  • 打赏
  • 举报
回复
只看了顶楼,哎。不知道楼主为什么会得出这样的数据,我用MFC写过类似PPT的软件,刷新频率是25帧/秒,没有发现速度跟不上的问题。
lxm520910 2010-07-10
  • 打赏
  • 举报
回复
顶贴有分
PSSonyXbox 2010-07-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 java3344520 的回复:]
谁说C#一定比C++慢的?封装得好的话.效率肯定比C++快
[/Quote]

同意
liangxd09 2010-07-10
  • 打赏
  • 举报
回复
[Quote=引用 106 楼 nbcool 的回复:]
引用 98 楼 liangxd09 的回复:
回84楼:确实这样,我只是想把人吸引过来。求解而已。

问题可能找到了,在78楼的,
参考文章
http://www.cnblogs.com/we-hjb/archive/2010/02/09/1666778.html

按照这样的话,速度可以快达到写屏的速度。

应该就是RGB565和BIT MASK的设置。估计。net里面设置了这……
[/Quote]



的确是16位有用,发帖之前用的是24位,不行。后来查看了WM是16位的。所以那个代码有两个条件,1、16位的ddb图像;2、设置MAST。设置mast的时候,*(DWORD *)(&bmi.rgq[0]) = 0xF800;
*(DWORD *)(&bmi.rgq[1]) = 0x07E0;
*(DWORD *)(&bmi.rgq[2]) = 0x001F;
后面两个明显越界写了,我的release版本好像把他优化了,正在找原因
liang8305 2010-07-09
  • 打赏
  • 举报
回复
CSDN所有与速度有关的帖子都与时间有关......

这个快阿~~ 时间是 XXMS
这个慢阿~~ 时间是 XXXMS

有意义吗?这是科学的方法吗?
wesweeky 2010-07-09
  • 打赏
  • 举报
回复
C C++ C# 。。。
liangxd09 2010-07-09
  • 打赏
  • 举报
回复
回84楼:确实这样,我只是想把人吸引过来。求解而已。

问题可能找到了,在78楼的,
参考文章
http://www.cnblogs.com/we-hjb/archive/2010/02/09/1666778.html

按照这样的话,速度可以快达到写屏的速度。

应该就是RGB565和BIT MASK的设置。估计。net里面设置了这个。很有可能(没源码,没真相)

感谢真心回帖的人!!!

哎其他的就不说什么了,当楼主不容易啊。
chenzhaochun 2010-07-09
  • 打赏
  • 举报
回复
不懂。。收藏。。学习。。关注。。
mainvhaide 2010-07-09
  • 打赏
  • 举报
回复
强烈顶C++ C#就不是搞“速度”的料。
wyodyia 2010-07-09
  • 打赏
  • 举报
回复
ppp
mochhk 2010-07-09
  • 打赏
  • 举报
回复
火爆~~~~~!都是编译器惹的祸~~~~
qq410029478 2010-07-09
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
buhuiwang 2010-07-09
  • 打赏
  • 举报
回复
学习了~
xiaoxiangqing 2010-07-09
  • 打赏
  • 举报
回复
没用过,按理c++是要快
jamesliuguo888102 2010-07-09
  • 打赏
  • 举报
回复
c# 是需要中间语言转换的,速度怎么会比C++快呢?是你技术问题。
r_swordsman 2010-07-09
  • 打赏
  • 举报
回复
c++: bitblt,网上的LibGDIPlus.lib强制使用gdi+ <-------- 封装过的GDI
c#: this.Graphics.DrawImage(this.Bitmap, 0, 0)。 <--------纯GDI


而且方法都不一样, 都用 DrawImage 肯定c++快
wgmkss 2010-07-09
  • 打赏
  • 举报
回复
顶一下。。。。。。。
加载更多回复(89)

7,657

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧