gpt4 book ai didi

objective-c - 具有高分辨率图像的 NSImageView 在调整窗口大小时会导致极度减速

转载 作者:搜寻专家 更新时间:2023-10-30 20:05:47 25 4
gpt4 key购买 nike

我正在为 OS X 创建一个简单的照片滤镜应用程序,我正在 NSImageView 上显示一张照片(实际上是两张照片彼此叠加,有两个 NSImageView ,但问题仍然适用于单一 View )。一切正常,但是当我尝试调整包含 NSImageView 的窗口大小时,窗口(也调整 NSImageViews 的大小)调整大小非常缓慢,大约小于1fps,对用户体验造成负面影响。我希望调整窗口大小尽可能平滑。当我禁用调整 ImageView 大小时,窗口会平滑地调整大小,因此速度变慢的原因是那些 NSImageView

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

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

最佳答案

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

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

关于objective-c - 具有高分辨率图像的 NSImageView 在调整窗口大小时会导致极度减速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19744445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com