GDI+绘图超级慢,50kb图接近2s怎么回事?

zjengjie 2013-05-15 10:03:31
用graphics的drawimage直接在屏幕上绘图速度超级慢,50kb的jpg接近两秒钟,这也太慢了,虽然知道GDI+绘图慢,也不至于慢到这种程度啊,我要求不高至少达到100ms以内就可以了。
以下是代码:
CDC dc;
dc.m_hDC=::GetDC(NULL);
Graphics graph(dc.m_hDC);
Image img(pPath);
img.RotateFlip(RotateFlipType::Rotate180FlipNone);//旋转180度
graph.DrawImage(&img, 0, 0);

我还试过CachedBitmap,一样慢,用CImage的draw倒是很快,不过似乎不能对图像进行旋转之类的操作。

还有将图片绘制到picture控件上速度也挺快的。
...全文
391 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ArcRain 2013-05-17
  • 打赏
  • 举报
回复
引用 12 楼 zjengjie 的回复:
[quote=引用 11 楼 dream238 的回复:] win8的显卡驱动不会是自带的吧?有没有安装过完整的显卡驱动...
确实是自带的,因为我感觉用起来挺正常的,并且玩游戏什么的也不怎么卡就没有去下驱动。[/quote] 试着更新看看,毕竟自带的不能完全发挥硬件性能...
zjengjie 2013-05-17
  • 打赏
  • 举报
回复
引用 11 楼 dream238 的回复:
win8的显卡驱动不会是自带的吧?有没有安装过完整的显卡驱动...
确实是自带的,因为我感觉用起来挺正常的,并且玩游戏什么的也不怎么卡就没有去下驱动。
ArcRain 2013-05-17
  • 打赏
  • 举报
回复
win8的显卡驱动不会是自带的吧?有没有安装过完整的显卡驱动...
zjengjie 2013-05-17
  • 打赏
  • 举报
回复
奇怪了,在xp系统上运行速度又很快。难道是win8的问题?
zjengjie 2013-05-15
  • 打赏
  • 举报
回复
引用 7 楼 wjjll123 的回复:
[quote=引用 6 楼 zjengjie 的回复:] [quote=引用 4 楼 wjjll123 的回复:] 为什么非要加载外部的资源。不能把资源导入到工程再加载嘛?
我就是为了在磁盘读取文件啊。而且我说过了,载入资源花费的时间不多可以忽略,主要是drawimage慢。[/quote] 不正常啊。我试了一下,我这边加载了一张30KB的PNG图片。加载事件毫秒为单位的。快的很[/quote] 对呀,所以来问问到底怎么回事,倒不是来讨论GDI+本身的绘图慢问题,那个慢也不会慢到这种程度啊。我刚测了下,不缩放的话要用484ms,缩放需要1765ms,前面的载入资源加上旋转才1ms。
hemmingway 2013-05-15
  • 打赏
  • 举报
回复
用DirectDraw, 因为DirectDraw多用于游戏开发,GDI或GDI+多用于软件开发(觉得一般上只是用GDI+来自绘控件而已,一些简单的绘图,有的地方GDI+的速度比GDI还慢)。绘图功能就可想而知了。。。。
wjjll123 2013-05-15
  • 打赏
  • 举报
回复
引用 6 楼 zjengjie 的回复:
[quote=引用 4 楼 wjjll123 的回复:] 为什么非要加载外部的资源。不能把资源导入到工程再加载嘛?
我就是为了在磁盘读取文件啊。而且我说过了,载入资源花费的时间不多可以忽略,主要是drawimage慢。[/quote] 不正常啊。我试了一下,我这边加载了一张30KB的PNG图片。加载事件毫秒为单位的。快的很
zjengjie 2013-05-15
  • 打赏
  • 举报
回复
引用 4 楼 wjjll123 的回复:
为什么非要加载外部的资源。不能把资源导入到工程再加载嘛?
我就是为了在磁盘读取文件啊。而且我说过了,载入资源花费的时间不多可以忽略,主要是drawimage慢。
zjengjie 2013-05-15
  • 打赏
  • 举报
回复
引用 3 楼 tiger9991 的回复:
GDI+本来就慢的,用FillRectangle,Brush用图片填充,效率会提高20%-30%的。
FillRectangle还是很慢。我在网上搜索解决GDI+慢的方法,都是说显示超大图慢到十几帧,我这两秒一帧的小图也太不正常了啊。
wjjll123 2013-05-15
  • 打赏
  • 举报
回复
为什么非要加载外部的资源。不能把资源导入到工程再加载嘛?
傻X 2013-05-15
  • 打赏
  • 举报
回复
GDI+本来就慢的,用FillRectangle,Brush用图片填充,效率会提高20%-30%的。
zjengjie 2013-05-15
  • 打赏
  • 举报
回复
引用 1 楼 laviewpbt 的回复:
你这不能完全怪drawimage啊,你前面的Image img(pPath); 和RotateFlip 占用的时间不会小于drawimage的,加载就不用说了,要解码。而RotateFlip 实际上也是创建了一副新的图像的。
我测试过了,那两个占用的时间不多,注释掉rotatefilp一样的慢,你能看到图像从上到下像卷帘一样从上到下慢慢打开。
laviewpbt 2013-05-15
  • 打赏
  • 举报
回复
你这不能完全怪drawimage啊,你前面的Image img(pPath); 和RotateFlip 占用的时间不会小于drawimage的,加载就不用说了,要解码。而RotateFlip 实际上也是创建了一副新的图像的。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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