3

我正在为 OS X 创建一个简单的照片过滤器应用程序,并且我正在显示一张照片NSImageView(实际上两张照片彼此重叠,两个NSImageViews,但问题仍然适用于单个视图)。一切都很好,但是当我尝试调整包含NSImageViews 的窗口的大小时,窗口(也调整了NSImageViews 的大小)的调整速度非常慢,大约不到 1fps,对用户体验产生了负面影响。我希望调整窗口大小尽可能平滑。当我禁用调整图像视图的大小时,窗口会平滑调整大小,因此减速的原因是那些NSImageViews.

我正在从我的 DSLR 加载 20 兆像素的图像。当我将它们缩小到屏幕的合理尺寸(例如 1024x768)时,它们会平滑缩放,所以问题在于NSImageView渲染图像的方式。它(我假设是这种行为的结果)每次需要将 20MP 图像重新绘制到视图的目标框架中时都会尝试重新渲染它。

如何使NSImageView重新缩放更顺畅?我应该用缩小版的图像喂它吗?我不想这样做,因为它是一个照片编辑应用程序,它也针对视网膜显示屏,而且视口实际上会很大。我可以做到,但这是我最后的选择。除了缩小之外,我怎样才能NSImageView更快地调整大小?

4

1 回答 1

4

我相信您正在寻找的部分解决方案是在 NSImage 的表示中。您可以使用 addRepresentation 向图像添加许多表示:我相信在绘图时会进行一些智能选择。在您的情况下,我认为您需要将两种表示形式(按比例缩小和全分辨率位图)添加到 NSImage。我强烈怀疑 drawRect: 应该选择低分辨率版本。我会确保在 NSImageView 中选择了“放大或缩小”,因为默认情况下仅按比例缩小,这可能会强制您大部分时间使用全分辨率图像。Apple 的文档中有一些关于 NSImage 中“设置图像表示选择标准”下的“匹配”的讨论,尽管乍一看这可能还不够。

然后,每当您需要对完整图像执行某些操作时,您都可以通过表示来请求完整分辨率的图像([NSImage 表示] 返回一个 NSImageRep 数组)。

于 2013-11-02T18:17:58.203 回答