c#-如何在WPF中更快地加载大型Camera RAW文件(NEF)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-如何在WPF中更快地加载大型Camera RAW文件(NEF),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1777字,纯文字阅读大概需要3分钟。
内容图文
![c#-如何在WPF中更快地加载大型Camera RAW文件(NEF)](/upload/InfoBanner/zyjiaocheng/683/062701dfcbb74ede8258d9021787f761.jpg)
我编写了一个简单的应用程序,该应用程序可以滚动浏览一个文件夹并显示该文件夹中的照片,用户可以查看该文件并选择要对照片进行的几种操作,然后再单击下一个.该应用程序运行良好,即使使用大型Jpeg(15-19 MB),它也可以快速滚动. (图像之间没有延迟),但是当涉及到RAW文件(20-25 MB)时,在用户单击下一步后,需要3-4秒才能加载下一张图像.
到目前为止,我已经尝试了几种方法,例如设置BitmapImage.bi.DecodePixelHeight = 1080(对于JPeg效果很好,但会更改原始文件的颜色等,因此无法使用)
我尝试使用后台工作程序将队列中的下一个文件加载到内存中,如果用户花费足够的时间查看当前图像,则此方法效果很好,但是如果您快速滚动浏览这些图像,则会收到错误消息“ 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)全部内容,希望文章能够帮你解决c#-如何在WPF中更快地加载大型Camera RAW文件(NEF)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。