我有一个包含微调器和空白区域的表单,我将使用滑块上的比例设置图像。表单加载时不会更改图像路径。目前我正在使用这样的东西来显示图像:
void drawImages(void)
{
//...
clearImages();
for each(String ^image in images)
{
box = gcnew PictureBox;
box->Name = "pictureBox" + i.ToString(); //Used when deleting.
// setting properties snipped
box->Image = Image::FromFile(image);
Controls->Add(box);
}
}
这里是清算代码,连接到微调器的'value changed'事件和表单的'resized'事件:
void clearImages(void)
{
for(int i=0; i<images->Count; ++i)
Controls->RemoveByKey("pictureBox" + i.ToString());
}
问题在于它们的图片需要很长时间才能重新加载和闪烁,因为这样。有没有办法解决这个问题?我知道我想做的一个改进是当用户从微调器上抬起鼠标时重绘图像,而不是每次改变时重绘它。
答案 0 :(得分:0)
所以,我写了一个应用程序,必须根据滑块的值调整图像中的各种参数,你可以尝试一些事情。
首先,缓存图像。您每次都从磁盘加载它们比从内存中检索它们慢得多。只在必要时从磁盘加载。
其次,不要添加和删除控件,而只需使用现有控件来显示图像并根据需要更改图像/调整控件大小。
第三,双重缓冲你的显示逻辑。在这种情况下,它可能对你没什么帮助,因为无论如何你都是一次性将它们连接到屏幕上,但值得一试。
第四,您可以使用计时器而不是微调器的值更改事件。当用户拖动滑块时启动计时器,并在计时器Tick事件中执行您的逻辑。当用户放开滑块时停止计时器。这样您就可以控制最大更新速度。
最后我必须直接对图像数据进行操作才能执行我的图像操作,因为GDI +只是有点太慢了。但是,你实际上并没有改变像素数据,因此位块传输(blt)应该足够快。
我希望其中一些有帮助。