使用NSImageView(cocoa / OSX)创建内存有效的缩略图

时间:2011-09-26 22:45:12

标签: macos cocoa memory-management image-scaling nsimageview

我正在从大图像创建小型NSImageViews(32x32像素),通常为512x512甚至4096 x 2048,用于极端测试用例。我的问题是,在我的极端测试用例中,当我显示缩略图时,我的应用程序内存占用量似乎增加了15MB以上,这让我觉得NSImage作为4096x2048而不是32x32存储在内存中我想知道是否存在是一种避免这种情况的方法。这是我创建NsImageView的过程:

首先我使用initByReferencingFile创建一个NSImage :(指向4096x2048 .png文件)

•接下来我通过调用initWithFrame来初始化NSImageView:

•然后我调用setImage:将我的NSImage分配给NSImageView

•最后我将NSImageView设置为NSScaleProportionally

我显然没有做任何事情来迫使NSImage的大小降至32x32,但我找不到一个好方法来处理这个问题。

1 个答案:

答案 0 :(得分:4)

您只需从原始图片创建一个新的32x32 NSImage,然后release原始图片。

首先,创建32x32图像:

NSImage *smallImage = [[NSImage alloc]initWithSize:NSMakeSize(32, 32)];

然后,将焦点锁定在图像上并将原件绘制到其上:

NSSize originalSize = [originalImage size];
NSRect fromRect = NSMakeRect(0, 0, originalSize.width, originalSize.height);
[smallImage lockFocus];
[originalImage drawInRect:NSMakeRect(0, 0, 32, 32) fromRect:fromRect operation:NSCompositeCopy fraction:1.0f];
[smallImage unlockFocus];

然后你可以随意使用较小的图片:

[imageView setImage:smallImage];

请记住release

[originalImage release];
[smallImage release];