2009-10-12 68 views
0

我开发的行为与“Adobe photoshop”类似。用户可以用鼠标指针绘制矩形,圆形,...然后移动或调整它的大小。对于这个功能,我假定每个形状都是一个存储在容器对象的泛型集合中的对象。当用户想要改变任何东西时,我认识到他点击了什么,在场景后面选择了目标对象,等等...... 当屏幕中的对象很多或者用户以高分辨率加载图片时,这种方式会出现问题。加载高分辨率图像时性能低下

您的意见是?

我该如何解决?

+1

Paint.NET项目是一个开放源代码并且是学习此类事物的好地方。 – 2009-10-12 13:51:31

+0

“为什么我的应用程序不是高性能的?” “让我指望可能的方法......” – Will 2009-10-12 13:54:34

回答

0

事情是,在嗨决议计算机需要使用更多的处理器,然后发生这种情况,请记住,即使在Adobe Photoshop中,这也发生在The Gimp中。

问候。

0

使用诸如dotTrace的分析器并找出哪个方法是最常用的方法,并且需要最多的时间来处理。那些是你想要优化的。除此之外,你可能不得不去GPU来尝试加速。

1

这很有道理,因为数据集越大,处理它所需的RAM和CPU就越多。

虽然性能问题很重要,但很多情况下可能会感觉到性能,例如线程问题 - 您有一个线程试图处理信息,并且阻止UI线程使其看起来像系统冻结。

有很多的StackOverflow上的信息,你可能想看看

0

查看使用性能分析工具(如ANTS Profiler)来帮助您准确找出瓶颈正在发生的位置。在高分辨率照片上进行真正的图形计算需要大量资源,但我会假定您正在使用的逻辑进行管理,并发现您的对象也需要进行一些调整。

0

我的高分辨率图像占用大量内存(更多bits-per-pixel)。因此,您对其执行的任何操作都意味着需要更多的位来操作。

您的程序是否使用“图层”?

如果没有,那么我猜你是直接添加组件到图像 - 这意味着每个操作必须操纵位。所以如果你不使用图层,那么你一定要开始。图层将允许您将操作绘制到屏幕上,但只能将它们合并到基本的高分辨率图像中 - 当您保存时!

你用什么库从Windows打开图像?

如果您使用的是System.Drawing,那么您实际上使用的是GDI+,因为它是其上的包装。 GDI +对很多事情都很好,因为它简化了大量的操作,但它并不是世界上最快的。例如,使用[Get | Set]像素方法比直接在BitmapData上工作慢得多。由于在GDI +之上加速操作的文章数量很多,我不会在这里重复它们。

我希望我提供的信息可以回答您的一些问题,从而产生新的问题。祝你好运!

+0

我实现了层对象列表逻辑。 请描述你说的图层。给我一个例子或链接。 – 2009-10-12 18:37:43

+0

你在使用System.Drawing吗?你的GUI在WinForms或WPF中? – mimetnet 2009-10-13 02:05:43

+0

是的,即时通讯使用System.Drawing&WinForms – 2009-10-13 13:01:39

相关问题