Cocoa:Scale Image拖入ImageWell

时间:2010-05-04 15:05:10

标签: cocoa image core-data rescale

我正在申请保留漫画书收藏。用户应该能够通过ImageWell将封面图片的图像拖到程序中。

由于无法再将图像拖出应用程序,因此我无需将图片保存为原始大小。 ImageWell大小的图像就可以了。

问题是如何使用我的应用程序重新缩放图像?

为了使事情变得更加复杂,ImageWell与Core Data绑定在一起。所以我需要在Core Data将图片保存为原始大小之前重新缩放图像。

2 个答案:

答案 0 :(得分:3)

缩放图片的常用方法是在其上分配一个所需较小尺寸NSImage的新lockFocus,并将原始图片绘制到NSImage({{1当你完成的时候,当然)。从那里,您可以使用CoreGraphics API以各种格式序列化图像,或者,如果您的需求很简单,可以使用unlockFocus上的TIFFRepresentation方法。

至于处理核心数据,我建议将您的图像保存在一个单独的实体中,该实体与拥有它的对象有关系。原因是因为Core Data在获取时一次加载了对象的所有数据,因此当您不需要图像数据(可能非常大,即使对于小图像)时,您可以避免缓慢的性能和内存压力。在每次获取时将其加载到内存中。您可以在主实体上放置一个临时NSImage属性,根据需要延迟加载/存储图像。

当您的图像更新其与新图像的绑定时,这将是重新缩放并将图像存储在数据对象中的绝佳机会。也就是说,您将通过绑定将完整大小的图像传递给数据对象,它将处理重新缩放。

答案 1 :(得分:1)

想想NSValueTransformer。值变换器只是......它转换了值。所以你希望你的图像调整大小(例如转换)和值变换器通过绑定工作。如果你看一下界面构建器中的绑定,你会看到“Value Transformer”部分,这就是你将变换器挂钩的地方。变换器有两个主要方法,一个是transformationValue方法,一个是transformTransformedValue方法。第一个用于在图像视图中显示数据时使用,第二个用于相反方向...当数据写入核心数据模型时。所以它们是核心数据和界面之间的进出方法。

因此,对于您的情况,您可以在reverseTransformedValue方法中进行大小调整(如Alex所解释的)。有关您需要做的更多详细信息和示例,请参阅here