2011-09-26 5 views
2

극단적 인 테스트 케이스의 경우 대형 이미지에서 작은 NSImageViews (32x32 픽셀)를 생성하는 경우가 많습니다 (512x512 또는 4096x2048). 내 문제는 내 극단적 인 테스트 케이스에서 내 축소 이미지를 표시 할 때 내 응용 프로그램 메모리 풋 프린트가 15MB 이상으로 늘어나는 것 같아서 NSImage가 32x32 대신 4096x2048으로 메모리에 저장되고 있다고 생각하게 만들고 거기에 이것을 피하는 방법입니다. 여기가 NsImageView을 만들 통과하는 과정은 다음과 같습니다NSImageView (코코아/OSX)를 사용하여 메모리 효율적인 축소판 이미지 만들기

먼저 •

나는 NSImage가 initByReferencingFile를 사용하여 만들 : 나는 initWithFrame에 대한 호출로 NSImageView를 초기화

• 다음합니다 (4096x2048의 .PNG 파일을 가리키는) :

• 그런 다음 나는 setImage 호출 다음 NSImageView

마지막 • 내가 분명히 NSImag을 강제로 아무것도하지

NSScaleProportionally

에 NSImageView 설정에 내 NSImage을 할당 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]; 

그런 다음 당신이 할 수 있습니다 이미지 :

[imageView setImage:smallImage]; 

기억하십시오 release!

[originalImage release]; 
[smallImage release]; 
+0

부탁드립니다. – Mike2012

관련 문제