【发布时间】:2015-04-23 18:39:28
【问题描述】:
对不起,我的英语不好。
我有一个图片框,可以在其中绘制 100000 个形状(但可能还有更多)。 绘图是在图片框的 Paint Handler 中进行的。
问题是:当我调整表单的大小(图片框所在的位置)时,使用包含它的面板的滚动条,来自另一个应用程序,......调用绘图处理程序...... 但是绘制过程需要相当长的时间,用户必须等到绘制完成...
我尝试了以下方法:
- 创建一个我绘制形状的位图
- 在绘图处理程序中,我将位图复制到图片框中
注意:图片框的大小和内容可以改变,因此位图也必须改变。 位图的创建+位图的恢复使应用程序比以前慢:
Bitmap bmp = new Bitmap(picturebox.Width, picturebox.Height);
// draw in Graphics.FromImage(bmp);
picturebox.Invalidate();
bmp.Dispose();
我还尝试了一个布尔标志:canRedraw。 当图片框的内容发生变化时,我将其设置为真,然后我调用图片框.Invalidate()。在绘图处理程序中,我检查是否 (canRedraw),如果是,我重绘内容(并且 canRedraw = false),否则我什么也不做。 但是通过最后一个解决方案,当我使用表单制作东西时,我的图片框被清除了......
你知道我该怎么做吗:
如果你是改变图片框内容的方法,那么你可以重绘图片框,否则你留下图片框的视觉内容不变。
你能帮帮我吗?
非常感谢:)
【问题讨论】:
-
程序员往往能够编写出能够让当今最强大的处理器崩溃的代码。 十万 个形状肯定会做到这一点。您必须编写更智能的代码,例如利用用户甚至看不到 90% 的形状,因为它们是重叠的这一事实。或者将调整大小的工作传递给 BackgroundWorker,它可以在不影响 UI 响应性的情况下重新生成位图。
标签: c# winforms events paint picturebox