June 6, 2012

dpとピクセル、画像の単位

Androidの画像の単位で一番よく使うdp(またはdip)とピクセルの関係の説明です。

dpとはdevice independent pixelの略で、デバイス非依存のピクセル、もう少し具体的にいうとLCDデバイスに依存しないピクセルという単位のことです。

定義は「160dpiのときの1dp=1ピクセル」です。

なぜピクセルでなくこんなdpという単位を使うかというと、Androidはさまざまな端末があり、LCDのdpi(dot per inch、1インチあたりのピクセル数)もバラバラです。そんなバラバラなデバイスであっても、アプリでこの大きさで表示したいといった画像は、どんなデバイスでも同じ大きさで表示してほしいからです。

もしここで物理的なサイズのピクセルで大きさを指定すると、例えばアプリが160ピクセルの正方形を表示するとして、160dpiのLCDで表示したときの物理的な大きさは1インチになりますが、320dpiのLCDで表示したときには半分の大きさの0.5インチになってしまいます。これをLCDのdpiに関係なく同じ物理的な大きさで表示させるためにdpを使います。

もし先ほどの例で160ピクセルでなく160dpを指定した場合、160dpiのLCDのときは160ピクセルに変換されて表示され、物理的な大きさは1インチになります。320dpiのLCDのときは320ピクセルに変換されて表示され、物理的な大きさは同じ1インチになります。

機種依存のないアプリを作るにはdpは非常に役に立ちます。

注意点はxmlレイアウトファイルなどでは単位を自由に指定でき、dp(またはdip)も当然使えるのですが、ソースコードのAPIのサイズ指定はたいていはピクセルです。そのときにdpを使いたい時は手動で変換する必要があります。

変換方法は、「ピクセル=dp × getResources().getDisplayMetrics().density」です。

その他の画像の単位として、
  • pt:ポイント、1/72インチ
  • mm:ミリメーター
  • in:インチ
も使えます。

No comments:

Post a Comment