web-dev-qa-db-ja.com

Android画像のppiをdpiに変換するにはどうすればよいですか?

Adobe Photoshopを使用してAndroidアプリ用のグラフィックの作成を開始しました。しかし、Photoshopの解像度は1インチあたりのピクセル数で設定されているため、続行できません。Googleの公式ドキュメントにあるように、Androidはdpiで設定された画像を必要とします。私は2つの間の変換についてウェブを検索しましたが、適切な式で終わることはありませんでした。

Androidのドキュメントには、この関係がpx = dp*dpi/160と記述されていることは知っています。しかし、私の問題は、dpiがわかっている場合、この計算で使用するdpの値をどこで取得できるかということです。または、dpの値について何らかの仮定はありますか?私は混乱しています。

25
Ruchira

Dpは密度に依存しないピクセルであり、画面のピクセル数を一般化するために使用されます。これらは http://developer.Android.com/guide/practices/screens_support.html から取られた一般化された数値です

  • xlarge画面は少なくとも960dp x 720dp
  • 大画面は少なくとも640dp x 480dp
  • 通常の画面は少なくとも470dp x 320dp
  • 小さな画面は少なくとも426dp x 320dp

画面の一般化されたDpi値:

  • 低密度(ldpi)画面用のldpiリソース(〜120dpi)
  • 中密度(mdpi)画面用のmdpiリソース(〜160dpi)。 (これはベースライン密度です。)
  • 高密度(hdpi)画面用のhdpiリソース(〜240dpi)。
  • 超高密度(xhdpi)画面用のxhdpiリソース(〜320dpi)。

したがって、リソースの一般化されたサイズ(フルスクリーンであると想定):

  • ldpi
    • 垂直= 426 * 120/160 = 319.5px
    • 水平= 320 * 120/160 = 240px
  • mdpi
    • 垂直= 470 * 160/160 = 470px
    • 水平= 320 * 160/160 = 320px
  • hdpi
    • 垂直= 640 * 240/160 = 960ピクセル
    • 水平= 480 * 240/160 = 720px

Edit-xhdpiの人気が高まっているので追加

  • xhdpi
    • 垂直= 960 * 320/160 = 1920px
    • 水平= 720 * 320/160 = 1440px

これらの値は、Nexus 10を含む、TVやNexus 4などのほとんどのxhdpi画面に適しているはずです(25k x 16kであるため、このための新しいカテゴリを作成しないと仮定します。まだ手にしています)。

/編集


これらのサイズを使用すると、画像はどの画面でも見栄えがよくなります。必ずdpのコードでサイズを定義してください。ただし、Androidは上記の変換を独自に処理します。

37
Michael Allen

Ldpi、mdpi、hdpiおよびxdpiの結果の解像度は、Googleのドキュメントの「Alternative Drawables」で言及されている代替ビットマップの3:4:6:8スケーリング比を満たさないため、Michael Allenの回答に同意しません。

http://developer.Android.com/guide/practices/screens_support.html#testing

したがって、最小サイズのベースラインの例を取ることをお勧めします

同じドキュメントの式を使用して470 x 320 dpで、ベースライン画面サイズの全画面解像度を計算します

px = dp *(dpi/160);ベースラインpx = dp *(160/160)= dp * 1の場合、px = dpです。これは、ベースライン構成の全画面サイズを意味しています。ピクセルで

470 X 320ピクセル(mdpi)

ここで、ldpi、hdpi、xhdpiの代替ドローアブルサイズの3:4:6:8スケーリング比率に従うために、mdpiからユニット値を取得する必要があります。つまり.

470/4 = 117.5

320/4 = 80

mdpiのスケーリング比が4であるため、4で除算します。ldpi、hdpi、xhdpiのスケーリング比は、それぞれ3、6、8です。単位の結果117.5と80にこれらの倍率を掛けるだけです。

ldpi

117.5 * 3 = 352.5

80 * 3 = 240

mdpi

117.5 * 4 = 470

80 * 4 = 320

hdpi

117.5 * 6 = 705

80 * 6 = 480

xhdpi

117.5 * 8 = 940

80 * 8 = 640

これらのサイズは、完全な3:4:6:8スケーリング比率になりました。

5
Nouman Hanif

はい、Dp(密度独立ピクセル)がすべてPhotoshopで処理されます。ピクセルの密度を考慮する必要はありません。非常に高いピクセル数の画像は、気になるすべてのもののために、超小型の高解像度UIボタンに配置できます。または、テトリスのレトロなスタイルのA0ポスターのピクセル数が少ない場合があります。これは、スケーリングできるためです。画面上の大きな領域ではほとんどのピクセルが拡大されず、小さな領域では多くのピクセルが縮小されます。

だからあなたの目標を選びなさい サイズへのリンク スクリーンサイズそしてそれをphotoshopで使ってください。 (また、誰が何を使用しているかを確認してください... 使用サイズの円グラフ

直感的に、このサイトは私を助けました ブログページへのリンク

実行時に、プラットフォームは使用中の画面の実際の密度に基づいて、必要なdp単位のスケーリングを透過的に処理します。

(プラットフォームはスケーリングを行います-密度比の処理はAndroidではなくユーザーによって行われます)、これはUIに非常に関連しています。

異なる画面でのUIの適切な表示を保証する方法として、dpユニットを使用してアプリケーションのUIを定義することを強くお勧めします。

UI要素をすべてのデバイスで同じように表示したいので、その数式で計算するピクセル数に基づいてスケーリングを行います。また、dpがスケーリングされて、スペアまたは密度が高くなりすぎると、見栄えがよくありません。

1
Vass

Photoshopの解像度は1インチあたりのピクセル数で設定されるため、Googleの公式ドキュメントにAndroidと記載されているように、dpiで設定された画像が必要になります。

1
ppi reclaim

すべてのデバイスで同じなので、その数式で計算するピクセル数に基づいてスケーリングを行います。

0
ppi news