【发布时间】:2014-12-02 17:30:19
【问题描述】:
我正在为 OS X 开发一个图像浏览器应用程序。它与 QuickLook 非常相似:您选择一个文件夹,应用程序会显示其中的第一张图像,您可以使用箭头键快速移动到下一张/上一张照片。
现在,我正在使用非常大的 RAW 格式图片测试我的应用程序:例如,我有一个将近 25 MB 的 .cr2 文件。 NSImageView 加载此类图片需要 5 到 10 秒。我希望从一张图片到下一张的过渡尽可能快。我看到 2 个选项:
1) 增量加载图片并在加载时显示它(通过块或逐步提高分辨率)。 可以这样做吗?怎么样?
2) 缩小图片以便 NSImageView 可以立即显示它们(我不太关心分辨率)。 图片缩放速度有多快?
谢谢!
【问题讨论】:
-
也许可以创建一个库之类的东西(如 iPhoto 或光圈),然后将图像保存在其中,或者如果这不可能,则只保存所有已查看图片的路径。在任何情况下,您都可以在其中保存每张图片的缩略图(如缓存)。文件名当然是不够的,你需要一个哈希,因为用户可能会更改图像但保留文件名。 (或者,如果某个路径上的对象发生变化,您可以使用新的 Finder API 来获得通知,但我对此并不熟悉)。这有点老套,更多的是一种解决方法而不是解决方案,但它可能是一个起点......
-
另一种选择(或扩展)是缩小文件夹中的所有图像(或用户接下来最有可能选择的图像)并将它们保存在数据库中。您可以在后台线程中执行此操作,以便接口始终负责。我认为让 NSImageView 调整图像大小是最糟糕的解决方案,因为它将整个图像保存在内存中,并且(如果我没记错的话)将图像加载到视图中是一个阻塞操作。
-
@HAS 是的,我现在的解决方案是:当用户选择一个文件夹时,如果文件夹内有任何大图像,我会询问用户是否要对图像进行预处理。如果他们接受,我会创建一个包含缩小图像的临时文件夹。如果没有,该应用程序只需要一段时间来显示更大的图像。它不是很干净,这就是我试图找到更好的解决方案的原因。
标签: objective-c macos nsimage nsimageview