2007/02/14

画像サイズの取得: NSImageのサイズがおかしい

画像を読み込んで縮小するコードを書いている時におかしな現象に出くわした。

ある2592 x 1944ピクセルのJPEG画像を読み込んで画像のサイズをNSImage:sizeで取得すると、なぜか1036.80005 x 777.599976になってしまう。別の画像だとこの現象は起こらず、2592 x 1944となる。

おかしい原因はプレビューアプリケーションで、2つの画像を比べてみることで分かった。サイズがおかしくなる画像は、180 dpi (ドット/インチ)で、うまくいく方は72 dpiだった。どうやらdpiに応じた処理が行われているらしい。

180 dpiにおける2592ピクセルは、14.4インチ。これは72 dpiでは1036.8ピクセルとなる。というわけでsizeで採れる値と一致する。つまり、NSImage:sizeが返す値は、画像を72 dpiで表示したときのサイズなわけだ。

ではどうやって画像のピクセルサイズを取得するか?

これはNSImageからビットマップオブジェクト(NSBitmapImageRep)を生成し、その寸法を取得すれば良い。

NSImage* image = ...
NSBitmapImageRep* imageRep = [NSBitmapImageRep imageRepWithData:[image TIFFRepresentation]];
NSSize aSize = NSMakeSize([imageRep pixelsWide], [imageRep pixelsHigh]);
こんな感じでめでたくピクセル数がとれた。

0 件のコメント: