2011-09-26 22 views
2

我從大圖像創建小型NSImageViews(32x32像素),通常是512x512甚至4096 x 2048,用於極端測試案例。我的問題是,在我的極端測試案例中,當我顯示縮略圖時,我的應用程序內存佔用量似乎增加了超過15MB,這使我認爲NSImage被作爲4096x2048存儲在內存中,而不是32x32,並且我想知道是否存在是避免這種情況的一種方法。下面是這個過程中我經歷創建NsImageView:使用NSImageView創建內存有效的縮略圖(可可/ OSX)

•首先,我創建使用initByReferencingFile一個NSImage中:(指着4096x2048 .png文件)

•接下來我初始化NSImageView一起initWithFrame的電話:

•然後我打電話setImage:我NSImage中分配給NSImageView

•最後,我設置NSImageView到NSScaleProportionally

我清楚什麼也不做強制NSImag e將尺寸縮小到32x32,但我很難找到解決這個問題的好方法。

回答

4

您可以簡單地從原始創建一個新的32x32 NSImage,然後release原始圖像。

首先,創建32×32的圖像:

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]; 

然後當你與小取悅你可以這樣做image:

[imageView setImage:smallImage]; 

請記住release

​​
+0

工作就像一個魅力,謝謝。 – Mike2012