我正在为OS X的图像浏览器应用程序工作。它与QuickLook非常相似:您选择一个文件夹,应用程序显示其中的第一个图像,并且您可以使用箭头键快速移至下一张/上一张照片。NSImageView:显示大图像
现在,我使用非常大的RAW格式图片测试我的应用程序:例如,我有一个几乎为25 MB的.cr2文件。 NSImageView需要5到10秒来加载这种图片。我希望从图片到下一个图片的过渡尽可能快。我看到2个选项:
1)逐渐加载图片并在加载时显示它(通过块或逐步提高分辨率)。 可以做到这一点吗?怎么样?
2)缩小图片,使NSImageView可以立即显示它们(我不在乎分辨率太多)。 您可以多快地缩放图片?
谢谢!
也许会创建类似库的东西(如iPhoto或光圈),并将图像保存在那里,或者如果这不可能只是所有已查看图片的路径。无论如何,您可以为每张图片保存缩略图(如缓存)。文件名当然是不够的,你需要一个散列,因为用户可能会改变图像,但保留文件名。 (或者,如果某个路径中的某个对象发生更改,您可以使用新的Finder API来获得通知,但我并不熟悉这一点)。这是一个有点hacky和更多的解决方法,但它可能是一个起点... – HAS 2014-12-02 18:21:37
另一种选择(或扩展)将缩小文件夹中的所有图像(或最有可能接下来选择的那些用户)并将它们保存在数据库中。您可以在后台线程中执行此操作,以便界面始终负责。我认为让NSImageView调整图像大小是最糟糕的解决方案,因为它将整个图像保存在内存中(如果我没有记错的话),将图像加载到视图中是一种阻塞操作。 – HAS 2014-12-02 18:26:15
@是的,我现在的解决方案是:当用户选择一个文件夹时,如果文件夹内有任何大图像,我会询问用户是否要预先处理图像。如果他们接受,我创建一个缩小图像的临时文件夹。如果没有,该应用程序只需要一段时间来显示较大的图像。它不是很干净,这就是为什么我试图找到更好的解决方案。 – Diego 2014-12-02 18:40:14