当前位置: 代码迷 >> Windows Mobile >> c#的一个绘图方法竟然比c++的快,求解~该怎么解决
  详细解决方案

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

热度:209   发布时间:2016-04-25 08:01:44.0
c#的一个绘图方法竟然比c++的快,求解~~
对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+本来就比较慢,所以可能里面有写屏的操作。

不知道原因,所以向各位大大求解。

------解决方案--------------------
你的问题是什么呢?C++ 的 bitblt本来就不是最快的方法,你这样比较有什么意义?
------解决方案--------------------
C# 中的Bitmap tempbmp1;
Bitmap tempbmp2;
你是在哪里赋值得 赋值得时间你没计算在内
而C++中的
 HBITMAP hBit = m_hBmp;
SIZE size;
BITMAP bitMap;
::GetObject(hBit, sizeof(BITMAP), &bitMap);
size.cx = bitMap.bmWidth;
size.cy = bitMap.bmHeight;
你是计算在内的
------解决方案--------------------
探讨
回ls:计算BitBlt差不多的,真机也测试过,c#这个方法快很多,快达到了ddraw的速度。“用的显示API都是自己写的”,怎么来写?ddraw来?

------解决方案--------------------
…………
------解决方案--------------------
up下。。
------解决方案--------------------
不懂,不懂啊
------解决方案--------------------
不动,路过~!
------解决方案--------------------
我来凑个热闹。。。
------解决方案--------------------
感觉两个代码计时的区间不一致。
C#版本好像只计算了DrawImage的时间,位图是已经初始化了的。
C++版本计算的时间多了SelectBitmap和DeleteDC。
------解决方案--------------------
学习学习
------解决方案--------------------

------解决方案--------------------
路过学习
------解决方案--------------------
很激烈啊
------解决方案--------------------

------解决方案--------------------
在下感觉,问题的关键不是在800*480,而是在位图的色位上.

c++: bitblt,网上的LibGDIPlus.lib强制使用gdi+(你bitblt到的hDC可能色位不一样,需要运算)
c#: this.Graphics.DrawImage(this.Bitmap, 0, 0)。(都是this指针,色位是一样的,直接拷贝)

------解决方案--------------------
怎么可能gdi比gdi+慢,gdi块多了!
探讨

C++的gdi++会有这么慢吗,至少比C++的gdi快吧

------解决方案--------------------
haode
------解决方案--------------------
探讨
谁说C#一定比C++慢的?封装得好的话.效率肯定比C++快--同意!

------解决方案--------------------
观察中,不懂
------解决方案--------------------
拿工资来的
------解决方案--------------------
学习ing
------解决方案--------------------
mark。。。。。。。。
------解决方案--------------------
每天回帖即可获得10分可用分!
------解决方案--------------------
  相关解决方案