gpt4 book ai didi

c# - 更快地显示图片框

转载 作者:太空狗 更新时间:2023-10-29 20:06:15 25 4
gpt4 key购买 nike

我正在尝试将图像快速加载到图片框中并在其上绘制。在我将位图分配给图片框和它出现之间有 0.13 秒的延迟。每当我执行 picturebox.refresh() 时,在调用 paint 方法之前都会延迟 0.13 - 0.15 秒。有什么办法可以消除这种延迟?

我在 Visual Studio 2010 中使用 C#。我使用 FreeImage 库加载图像。

这是我的 pictureBox_MouseMove 事件中的代码:

if (IsMouseDown || DrawLine.Checked || IsMovingBox)  
{
Tracing.Trace("Update Picture Box");
pictureBox.Refresh();
}

然后,当我的绘画事件被调用时,我描绘出一条线。延迟在两条跟踪线之间。

如果我使用 117kb 的双色 tiff 图像,则延迟为 0.13 秒。将此图像加载到内存中需要 0.04 秒。用这个位图替换我的图片框位图需要 0.01 秒。

如果我使用 1125kb 的灰度 jpg 图像,则延迟为 0.14 秒。将此图像加载到内存中需要 0.26 秒。用这个位图替换我的图片框位图需要 0.03 秒。

最佳答案

假设您的代码中没有其他延迟会阻止 UI 线程重新进入消息循环,以便可以调用 OnPaint() 方法:您的 Paint 事件处理程序在之后被调用PictureBox 绘制了图像。目前还不可见,PB使用双缓冲。

当必须调整图像大小以适应 PB 的客户区时,该图像的绘制成本会很高。在您的情况下这很可能是因为您的图像非常大。它使用高质量的双三次滤波器使调整后的图像看起来不错。这相当昂贵,尽管结果很好。

为避免这种费用,请在将图像分配给 Image 属性之前自行调整图像大小。使其与 PB 的 ClientSize 一样大。

这本身就会产生很大的不同。接下来您可以使用 32bppPArgb 像素格式创建缩放位图。这种格式比任何其他格式快大约 10 倍,因为它与大多数机器上的视频适配器匹配,因此不需要像素格式转换。

部分代码:

    private void loadImage(string path) {
using (var srce = new Bitmap(path)) {
var dest = new Bitmap(pictureBox1.Width, pictureBox1.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
using (var gr = Graphics.FromImage(dest)) {
gr.DrawImage(srce, new Rectangle(Point.Empty, dest.Size));
}
if (pictureBox1.Image != null) pictureBox1.Image.Dispose();
pictureBox1.Image = dest;
}
}

您可能想要修改它,以便图像保持其纵横比。首先按原样尝试,以确保您确实获得了性能改进。

关于c# - 更快地显示图片框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3567558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com