我有1个大的bitmap,我想复制他,以为要频繁的复制使用他,所以就要考虑效率的问题!!!
有没有什么好的方法么
1》DrawImage方法不行!
//Bitmap tempbitmap = new Bitmap(insertrect.Width, insertrect.Height);以为要new出一块来存放我复制下来的bitmap。所以效率不理想2》Clone 方法比上一个稍微好点。但是效果也不理想。大家还有什么好的建议么?????
有没有什么好的方法么
1》DrawImage方法不行!
//Bitmap tempbitmap = new Bitmap(insertrect.Width, insertrect.Height);以为要new出一块来存放我复制下来的bitmap。所以效率不理想2》Clone 方法比上一个稍微好点。但是效果也不理想。大家还有什么好的建议么?????
你真的需要复制整块 Bitmap吗?
在Clone函数中可以只复制一个bitmap的一部分,为什么不尝试着优化你的算法,只复制bitmap的部分并修改这一部分来解决这个问题呢?
如果你要使用GDI进行这种类型的绘制,的确是会比较慢。这一点没办法解决。
而我clone的大小大约是900*700。剩余的部分我要重画!!为就是为了考虑效率才想复制很大一块不需要重新画的呢。要是全重画效率还蜗牛呢!!!!现在的问题是这快不要重画的部分如何的处理我是用的双缓冲的绘制。
现在的问题是如何最有效率的复制大的部分。
gdi+中有什么好方法?
或是gdi中。还有问一下。gdi中bltbit效率如何!!!
绘图函数中可以绘制整个Bitmap,也可以只绘制一部分。
就效率而言,个人经验,bltbit好些。貌似DrawImage即便是绘制图片的一部分和整幅图也没啥区别,不过即便如此的话,也要比创建一个新的Bitmap要好些呀。
在说了,利用双缓冲绘制图形,首先不是的要建立一个内存的bitmap么。然后把内存的bitmap显示到绘制表面上。
我现在的问题是第1次在内存的bitmap上绘制以后,由于某些操作,我需要把原来内存上一部分保留。另一部分进行重新绘制,但是保留的部分并不是原来的位置(可能向左移动,也可能向右移动!),我需要移动他的位置以适应新的。然后把剩余的内存bitmap进行从新绘制,然后在显示到绘制表面上!!这个过程中。在保留原来内存bitmap的时候是不是需要建立个新的bitmap,然后在把这个bitmap绘制到原来内存bitmap上呀!!!这就需要建立个新的bitmap对象!!这样一样效率貌似就蜗牛了。有没有好的好的方法实现我说的呢,并且不用建立一个新的bitmap!!!!
如果觉得GDI+慢,就用GDI吧。如果不知道怎么把一个Bitmap绘制到另一个Bitmap上的话,看下面的代码:Graphics g = Graphics.FromImage(bmpBuf);
g.DrawImage(...);GDI的话就是创建一个兼容DC,过程和GDI+类似。