別の NSImage の内容からちょうど 200 x 300 ピクセルの大きさの NSImage を作成しようとしています。私はスケーリングしているだけではなく、はるかに大きな画像のチャンクから取得しています。
結果の画像は、私が望むピクセルのように見えます。ただし、数が多すぎます。NSImage は 200 x 300 のサイズを報告し、画像表現は 200 x 300 のサイズを報告しますが、画像表現は 400 x 600 の 2 倍のピクセル数を報告します。この画像表現をファイルに保存すると、 400 x 600 の画像。
これが私がやっている方法です:
NSRect destRect = NSMakeRect(0,0,200,300);
NSImage* destImage = [[NSImage alloc] initWithSize:destRect.size];
// lock focus, set interpolation
[destImage lockFocus];
NSImageInterpolation oldInterpolation = [[NSGraphicsContext currentContext] imageInterpolation];
[[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh];
[_image drawInRect:destRect fromRect:srcRect operation:NSCompositeCopy fraction:1.0];
[destImage unlockFocus];
[[NSGraphicsContext currentContext] setImageInterpolation:oldInterpolation];
NSData* tiffImageData = [destImage TIFFRepresentation];
NSBitmapImageRep* tiffImageRep = [NSBitmapImageRep imageRepWithData:tiffImageData];
デバッガーで、NSBitmapImageRep のサイズは適切ですが、ピクセル数が 2 倍になっていることがわかります。
po tiffImageRep
(NSBitmapImageRep *) $5 = 0x000000010301ad80 NSBitmapImageRep 0x10301ad80 Size={200, 300} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) **Pixels=400x600** Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x10f353a40
そのため、ディスクに保存すると、200 x 300 ではなく 400 x 600 のイメージが得られます。これを修正するにはどうすればよいですか?