3

極端なテストケースでは、大きな画像から小さなNSImageView(32x32ピクセル)を作成しています。多くの場合、512x512、さらには4096x2048です。私の問題は、極端なテストケースでは、サムネイルを表示するとアプリケーションのメモリフットプリントが15 MB以上増加するように見えることです。これにより、NSImageが32x32ではなく4096x2048としてメモリに保存されていると思われ、そこにあるかどうか疑問に思いました。これを回避する方法です。NsImageViewを作成するために実行するプロセスは次のとおりです。

•最初に、initByReferencingFileを使用してNSImageを作成します:( 4096x2048 .pngファイルを指す)

•次に、initWithFrameを呼び出してNSImageViewを初期化します。

•次に、setImage:を呼び出して、NSImageをNSImageViewに割り当てます。

•最後に、NSImageViewをNSScaleProportionallyに設定しました

NSImageのサイズを32x32に強制することは明らかに何もしていませんが、これを処理するための適切な方法を見つけるのに苦労しました。

4

1 に答える 1

5

NSImage元の画像から新しい32x32を作成し、次に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];
于 2011-09-27T23:16:51.053 に答える