開発メモ

開発関係のメモをいろいろと。たぶん。

NSImageのサイズを取得する方法

NSImageからサイズを取得する方法は色々有りますが、その中で、『正しいピクセル数』を取得するにはどうすればいいのでしょうか? 特に、画像ファイルを読み込んだ場合。

動作を確認した環境

環境 情報
OS X 10.9.2
Xcode 5.1
Date 2014/03/31

実験

実験内容

NSImageからサイズを取得する方法はこんな感じ。

  1. NSImageのsize
  2. NSImageからNSImageRepを取得してsize
  3. NSImageからNSImageRepを取得してpixelsWideとpixelsHigh

実験に使用した画像ファイルがこちら。

f:id:see_ku:20140331210232p:plain

結果

それぞれの方法で、サイズを調べた結果がこちら

方法 サイズ
1. NSImageのsize 148x148
2. NSImageRepのsize 148x148
3. NSImageRepのpixelsWideとpixelsHigh 1024x1024

考察

どうして、3だけ別の値が帰ってきているのか? これは、sizeで取得される値は元々の画像ファイルに指定されてたDPIの値が反映されているためです。

通常、DPIの指定がない画像ファイルはピクセル数=画像サイズになります。この場合、DPIは72DPIとみなされます。たぶん。今回実験に使用した画像では、497DPIに指定されていました。

f:id:see_ku:20140331210257p:plain

結果的に、画像サイズが148x148になっていた、と。pixelsWideとpixelsHighは元々のピクセル数をそのまま返すため、1024x1024になっています。

結論

DPIを考慮したサイズが知りたい場合は、NSImageのsizeを使用。元々のピクセル数が知りたい場合はNSImageRepのpixelsWideとpixelsHigh。

DPIを考慮したサイズを知りたい場合がどれだけあるのか疑問ですが・・・

備考

参考資料

My First iMac: 画像サイズの取得: NSImageのサイズがおかしい
http://myfirstimac.blogspot.com/2007/02/nsimage.html