WPF 图像控件大图像更新速度慢

问题描述 投票:0回答:1

每当获取新图像数据时,我都会尝试更新 WPF 中的

Image
控件。我正在处理 1500x1500 16 位 RAW 图像(每个大约 5MB),我看到平均更新时间约为 22 毫秒,这对于我的用例来说似乎很慢。

目前,我正在后台任务中顺序加载图像并更新 UI,如下所示:

while (!cancelToken.IsCancellationRequested)
{
    cancelToken.ThrowIfCancellationRequested();

    if (imageCounter > 359)
        imageCounter = 0;

    //_memoryMappedViewAccessor.ReadArray(0, imageData, 0, imageData.Length);
    string path = $"{basePath}img{imageCounter++:D4}.raw";
    frame = ImageHelper.LoadImageRaw(path, Size, Size);

    await Application.Current.Dispatcher.InvokeAsync(() =>
    {
        _writeableBitmap.Lock();
        _writeableBitmap.WritePixels(_rect, frame.Data, locStride, 0);
        _writeableBitmap.Unlock();
        ImageDisplay = _writeableBitmap;

        _frameCounter.Count();
    }, DispatcherPriority.Background, cancelToken);

}

读取数据并写入

WriteableBitmap
大约需要 2-3 毫秒,这是预期的。然而,整个更新大约需要 22 毫秒,这表明对于此类图像,
Image
控件的内部重绘大约需要 19 毫秒。

我还使用了尺寸为 3000x3000 的较大图像。这导致速度慢了 4 倍(总共大约 80 毫秒,加载数据需要 8 毫秒),从相对大小来看,这至少看起来是合理的。 此外,我注意到在附加调试器的情况下启动应用程序时,图像显示运行得更快。

对于具有大图像的 WPF Image 控件来说,这种性能是典型的吗?或者我的方法是否做错了(特别是因为附加调试器似乎会加快图像绘制速度,这很奇怪)可以优化以实现更快的更新?

c# wpf image performance
1个回答
0
投票

我没有找到更快更新“图像”控件的解决方案。相反,我现在使用嵌入到控件中的 OpenGL 窗口,将图像加载为纹理并将其渲染在屏幕填充四边形上。即使图像尺寸更大,效果也会更好。

© www.soinside.com 2019 - 2024. All rights reserved.