我用C#编写了一些带有图形用户界面的简单图像处理程序。例如,我想在HSV颜色模型中更改图像颜色,并将每个像素从RGB转换回来。
我的程序通过用户选择加载一些图片,并在窗体的一个面板中使用其图形上下文显示它。然后,用户可以通过移动滚动条、点击按钮、选择某些图像区域等对这个图片进行一些操作。当用户执行这些操作时,我需要实时逐像素地更改整个图片。因此,我编写了类似以下的代码:
for (int x = 0; x < imageWidth; x++)
for (int y = 0; y < imageHeight; y++)
Color c = g.GetPixel(x, y);
c = some_process_color_function_depending_on_user_controls(c);
g.SetPixel(x, y)
即使我在内存中处理图形(而不是在屏幕上),GetPixel和SetPixel函数的速度非常慢(因此,由于我的程序运行非常缓慢,我对其进行了分析,并解释说这两个函数最大程度地减慢了我的程序)。因此,当用户移动滑块或选中复选框时,我无法在短时间内处理大型图片。
请帮忙!我该怎么做才能让程序更快?我可以考虑使用其他第三方图形库或改变编程语言!