CString str = "E:\\个人代码\\HumanBody\\bin\\male.png";
Image * image;
image = new Image(str.AllocSysString());
for(int i = 0; i < 10; i++)
{
g.DrawImage(image, 100, 100, 200, 200);
}
就10幅图都慢的要死,如何解决这个问题呢?如果不用drawimage,速度立马恢复,怎么回事啊??
如果真是drawimage的问题,该如何解决呢?
12 个解决方案
#1
BitBlt
#2
BitBlt
#3
你这样每次都加载不慢才怪,上面的回复的方法没到点子上面。 你缓存一下到成员变量里面,如果需要优化你可以考虑只绘制看得见的部分。
#4
楼上有道理
#5
楼上有道理
#6
楼上有道理
#7
支持
#8
支持
#9
如果引用文件名字,不每次加载可以吗?
另外一改版大家都发两个回复了,呵呵~~
#10
GDI+ 的 DrawImage尽管是.NET实现的,但它并不慢, 你得检查你的做法.
#11
#12
我也遇到这个问题了,确实是很慢的,比起BitBlt差太多了,但是BitBlt又不能实现从内存图像到内存图像的拷贝(似乎是基于屏幕显示拷贝的),楼上的观点不知道是依据什么说的,在楼主的代码中只要注释或启用循环体内的代码就能看出DrawImage方法的性能差异了,不论其他地方的效率是否优化,主要影响性能的地方确是在这里的。
#1
BitBlt
#2
BitBlt
#3
你这样每次都加载不慢才怪,上面的回复的方法没到点子上面。 你缓存一下到成员变量里面,如果需要优化你可以考虑只绘制看得见的部分。
#4
楼上有道理
#5
楼上有道理
#6
楼上有道理
#7
支持
#8
支持
#9
如果引用文件名字,不每次加载可以吗?
另外一改版大家都发两个回复了,呵呵~~
#10
GDI+ 的 DrawImage尽管是.NET实现的,但它并不慢, 你得检查你的做法.
#11
#12
我也遇到这个问题了,确实是很慢的,比起BitBlt差太多了,但是BitBlt又不能实现从内存图像到内存图像的拷贝(似乎是基于屏幕显示拷贝的),楼上的观点不知道是依据什么说的,在楼主的代码中只要注释或启用循环体内的代码就能看出DrawImage方法的性能差异了,不论其他地方的效率是否优化,主要影响性能的地方确是在这里的。