我正在为OS X创建一个简单的照片过滤器应用程序,我正在NSImageView
上显示一张照片(实际上有两张照片在彼此的顶部,有两个NSImageView
,但问题仍然适用对于单一视图也是如此)。一切都很有效,但当我尝试调整包含NSImageView
的窗口的大小时,窗口(也会调整NSImageView
的大小)调整速度非常慢,大约不到1fps,造成负面影响关于用户体验。我希望调整窗口尽可能平滑。当我禁用调整图像视图的大小时,窗口会平滑地调整大小,因此减速的原因是那些NSImageView
s。
我正在从我的数码单反相机上加载20万像素的图像。当我将它们缩小到合理的屏幕尺寸(例如1024x768)时,它们可以平滑地缩放,因此问题在于NSImageView
呈现图像的方式。它(我假设这种行为的结果)每次需要将其重绘为视图的目标帧时,都会尝试重新渲染20MP图像。
如何让NSImageView
重新缩放更顺畅?我应该用缩小版的图像来喂它吗?我不想这样做,因为它是一个照片编辑应用程序,也针对视网膜显示屏幕,视口实际上会非常大。我能做到,但这是我的最后选择。除了按比例缩小之外,如何让NSImageView
更快地调整大小?
答案 0 :(得分:4)
我相信您正在寻找的部分解决方案是在NSImage的表示中。您可以使用addRepresentation为图像添加许多表示:我相信在绘制时会进行一些智能选择。在您的情况下,我认为您需要将两个表示(缩小和全分辨率位图)添加到NSImage。我强烈怀疑drawRect:应该选择低分辨率版本。我会确保在NSImageView中选择“向上或向下扩展”,因为默认情况下仅缩小,这可能会强制在大多数时间使用全分辨率图像。在NSImage的“设置图像表示选择标准”下,Apple的文档中有关于“匹配”的讨论,尽管乍一看这可能还不够。
然后,每当您需要对整个图像执行某些操作时,您将通过遍历表示来请求全分辨率图像([NSImage表示]返回NSImageRep数组)。