gpt4 book ai didi

c# - 如何在 WPF 中更快地加载大型 Camera RAW 文件 (NEF)

转载 作者:行者123 更新时间:2023-11-30 15:21:30 24 4
gpt4 key购买 nike

我编写了一个简单的应用程序,它可以滚动文件夹并显示该文件夹中的照片,用户可以查看文件并选择要对照片执行的几个操作,然后再单击下一个。该应用程序运行良好,即使使用较大的 Jpeg (15-19 MB),它也可以非常快速地滚动。 (图像之间没有延迟)但是当涉及到 RAW 文件(20 - 25 MB)时,在用户单击下一步后加载下一张图像需要 3-4 秒。

到目前为止,我已经尝试了几个选项,比如设置 BitmapImage.bi.DecodePixelHeight = 1080(对于 JPegs 效果很好,但会改变原始文件的颜色等,因此无法使用)我曾尝试使用后台工作程序将队列中的下一个文件加载到内存中,如果您的用户花费足够的时间查看当前图像,则此方法效果很好,但是如果您快速滚动浏览图像,则会收到错误消息“BackgroundWorker 当前正忙”。我知道这是可以做到的,因为 Windows 10 应用程序“照片”可以快速滚动浏览 NEF 文件,我只是想要一些关于我应该如何实现与此相同的速度的建议。

有没有更好的方法在后台加载图像,有没有一种方法可以压缩原始文件以在加载它们之前以 1920 * 1080 显示它们(目前它们是 6000 * 4000)或任何其他想法很有帮助

最佳答案

您可以尝试从该原始文件中提取嵌入的 jpeg 图像。大多数(甚至可能是所有)相机在 RAW 中包含全尺寸 jpeg,这应该适合您的预览。我用了dcraw工具(here 是文档)。要从您的 .NET 代码调用它,只需通过 Process.Start 调用它:

private void ExtractJpegFromRaw(string raw, string outputPath) {
if (!File.Exists(raw)) return;
var dcraw = Path.Combine("path to dcraw.exe here");
var command = String.Format("\"{0}\" -e -c -t 0 \"{1}\" > \"{2}\"", dcraw, raw, outputPath);
var p = new Process();
p.StartInfo = new ProcessStartInfo("cmd", String.Format("/c \"{0}\"", command));
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.WaitForExit();
}

我必须说我没有衡量它的性能,但提取现有的 jpeg 应该很快。所以你可以做的是运行这段代码,然后显示生成的 jpeg,另外你可以缓存预览,下次用户将查看相同的原始文件时 - 你将已经准备好 jpeg(这是大多数照片查看器工具所做的 - 他们缓存预览) .

关于c# - 如何在 WPF 中更快地加载大型 Camera RAW 文件 (NEF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37481672/

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