objective-c - NSImageView:显示大图

标签 objective-c macos nsimage nsimageview

我正在为 OS X 开发一个图像浏览器应用程序。它与 QuickLook 非常相似:您选择一个文件夹,该应用程序会显示其中的第一张图像,您可以使用箭头键快速移动到下一张/上一张图片。

现在,我正在使用非常大的 RAW 格式图片测试我的应用:例如,我有一个几乎 25 MB 的 .cr2 文件。 NSImageView 加载这种图片需要 5 到 10 秒。我希望从一张图片到下一张图片的过渡尽可能快。我看到 2 个选项:

1) 逐步加载图片并在加载时显示它(通过 block 或逐渐提高分辨率)。 这有可能吗?怎么办?

2) 缩小图片以便NSImageView 可以立即显示它们(我不太关心分辨率)。 你能以多快的速度缩放图片?

谢谢!

最佳答案

这 5-10 秒可能是由于将 RAW 数据转换为 NSImageView 可以显示的格式。仅从磁盘读取 25MB 就会造成延迟,处理所有这些数据会增加更多。只要有可能,您就会希望避免这种转换过程。

CR2 文件可以包含小的 JPEG 预览图像,读取小的缩略图肯定比转换 25MB 的文件快得多。网页Inside the Canon RAW format version 2有很多关于 CR2 文件结构的信息,应该可以帮助您找到任何缩略图。另一页,Extracting thumbnails from camera RAW files (.CR2 and .NEF) with PHP ,演示了如何从 CR2 文件中提取缩略图。

如果文件中包含的缩略图不能满足您的需要,您必须让 NSImageView 或其他组件为您转换文件,或者编写您自己的转换器.上面第一个链接中的 CR2 格式信息应该可以帮助您找到 RAW 数据本身,并且与通过仅读取每 n 行像素(然后仅使用您阅读的行中的每 n 个像素)。请参阅提取缩略图... 文档中的第 4 部分以帮助解释 RAW 数据。

关于objective-c - NSImageView:显示大图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27255438/

相关文章:

ios - 使用 UIScrollView 的简单图片库

c - C/Objective-C 中的 ANSI 颜色提取库

objective-c - 从数组中读取随机值

ios - 为什么我的代码只打印 Xcode 中数组中的第一个元素?

ruby-on-rails - 警告 : Insecure world writable dir/usr/local/bin in PATH, 模式 040777

macos - OS X 的 Bash 脚本绝对路径

macos - NSScrollView 并在滚动时手动设置内容偏移量

objective-c - NSImage 到 NSBitmapImageRep

macos - 试图转动 [NSImage imageNamed :NSImageNameUser] into NSData

objective-c - 在 mac os x app cocoa 中生成图像文件的问题