我正在从大图像创建小型NSImageViews(32x32像素),通常为512x512甚至4096 x 2048,用于极端测试用例。我的问题是,在我的极端测试用例中,当我显示缩略图时,我的应用程序内存占用量似乎增加了15MB以上,这让我觉得NSImage作为4096x2048而不是32x32存储在内存中我想知道是否存在是一种避免这种情况的方法。这是我创建NsImageView的过程:
首先我使用initByReferencingFile创建一个NSImage :(指向4096x2048 .png文件)
•接下来我通过调用initWithFrame来初始化NSImageView:
•然后我调用setImage:将我的NSImage分配给NSImageView
•最后我将NSImageView设置为NSScaleProportionally
我显然没有做任何事情来迫使NSImage的大小降至32x32,但我找不到一个好方法来处理这个问题。
答案 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];