2016-04-01 18 views
0

私はいくつかの画像が必要なAndroid + iOSアプリで作業しています。私は、イメージがすべてのデバイスで15mmと言うように「触れる」サイズにしたいと思っています。画面が大きいデバイスの場合は、イメージを大きくし、イメージを大きくしないでください。Android/iOSで縮尺が異なる場合、さまざまな密度のバケットの画像サイズが異なるのはなぜですか?

私の問題は画像の解像度を選択する方法です()。

画像にすべてのデバイス上の15ミリメートルを作成するには2つの戦略があります。

  1. サプライイメージが異なる解像度で、彼らは

Aに合うように、最も近い一致

  • スケールにそれらを選択最初の戦略は、ピクセル完全な画像を取得する唯一の方法だということです。しかし、コンプもあります:

    Androidには、さまざまな密度バケットがあります(ldpi、hdpi、mdpi、xhdpiなど)。異なるデバイスは異なる密度のバケットに属します。しかし、正確な密度は依然として大きく異なる可能性があります。したがって、最初の戦略を決めてxhdpi(320dpi)の正しいサイズで画像を供給すると、350または300dpiのデバイスがその密度バケットに属し、結果として得られる画像のサイズが変化します。

    私は、2番目の戦略であると考えています。イメージを適合させるように拡大してください。しかし、なぜ私は異なる解像度で画像を供給すべきなのだろうか?そして、各密度バケットの "最適な解像度"(mm単位のサイズ要件があります)は何ですか?

    私は、xxxhdpiディスプレイに表示される画像が低解像度ディスプレイの画像よりも詳細であることを理解します。だから、各濃度バケットごとに異なる画像を供給する意味があることが分かります。とにかく縮尺を変えたいのであれば、どうして違う決議をしなければならないのか分かりません。

    なぜ、すべての密度バケットのサイズが1024x1024の画像を持つことができないのですか?そして、オリジナルが同じであれば、異なる密度のバケットに異なる画像を供給する必要があるのはなぜですか?

  • +0

    画像を15mm正確にしたい場合は、Androidで画像のサイズを変更する必要があります。しかし、この質問は本当にちょうど "私の仕事をより難しくするのではなく、もっと多くの画像を供給しなければならない理由は何ですか?" 「すべての密度バケットが同じサイズの画像を持っていないのはなぜですか?」という答えは、単にアスペクト比**です。 – Shark

    +0

    すみませんが、あなたは何を話していますか?アスペクト比は、高さ対幅のように?密度バケットとは関係がないことがわかります。私は哲学を理解したいので質問を投稿しました。ディレクトリや名前付けスキーマに何百種類もの解像度で画像を提供するスクリプトを書くのに問題はありません。しかし、私はそれが単に歴史的な理由であっても、それの背後にある推論を理解することなく物事を行うのが好きではありません。 – Jonatan

    +0

    非常に有用な質問です。ありがとうございました。 – stevehs17

    答えて

    1

    Iは最初の戦略を決定し、xhdpiの正しいサイズの画像を指定した場合には(320dpi)350または300 DPIを有するデバイスがまだその密度バケットに属していてもよいし、得られた画像のサイズは変化するであろう。あなたはImageView(または任意のウィジェットの画像を使用している)wrap_contentに基づいて大きさにすることを設定した場合のみ

    。ウィジェットのサイズを他のディメンション(たとえば15mm)に基づいて設定すると、Androidは密度に基づいて画像を選択し、指定されたサイズを固定するように縮尺を変更します。

    異なる解像度で画像を供給するのはなぜですか?

    品質。見た目のイメージ品質は、イメージを拡大するほど減少します。これは特に画像のアップスケーリングに当てはまりますが、ダウンスケーリングの問題も発生します。

    また、特にAndroid 1.x/2.xデバイスでは、このようなスケーリングはアプリケーションメモリ(ヒープスペース)を使用して行われました。このようなスケーリングを避けることは、メモリ使用には有益です。現代のデバイスでは、AFAIKはGPU上でスケーリングされますが、これはいくらか助けになります。しかし、全体として、可能な限り最小の解像度のビットマップを入力として使用して、ニーズやユーザーの期待に応える視覚的な結果を得たいとします。これは、低密度デバイスに低解像度ビットマップを使用する理由です。—は、RAMを浪費することが保証されています。すべてのユーザーに、大量のRAMを搭載したハイエンドデバイスがあるわけではありません。

    各密度バケットの「最適な解像度」(mm単位のサイズ要件)はどのくらいですか?

    密度は、インチまたはピクセルで表します。 mm値をインチに変換し、密度を掛けてピクセル単位で値を取得します。

    たとえば、すべての密度バケットに1024x1024のサイズの画像があるわけではありません。

    何らかの理由で結果が得られ、ユーザーのディスクスペースやヒープスペースを浪費しない場合は、絶対に歓迎します。

    +0

    ありがとう!私があなたを正しく理解するならば、それは主にRAM/CPUサイクルとディスクスペースを節約することです。それでも、1つのイメージを1024x1024でなく、256x256とすると、ディスクスペースは節約できます(RAM/CPUサイクルではない)。 「品質」の段落で言えば、より低い解像度の画像を供給すると、より大きな画像よりもさらに小さな画像に縮小すると、より良い品質が得られることに同意しませんか? – Jonatan

    +0

    "最適な解像度"について: "a"密度を乗算すると、確信している密度だと思います。アップスケーリングは常に避けなければならないので、特定の密度バケット内の既存のデバイスの最高dpiより高い密度が使用されるべきだと思います。 – Jonatan

    +0

    @Jonatan:「私は同意しません...」 - それは依存しますアートワーク。高密度でスケーリングされていないように見える細かいアートワークは、低密度に縮小されるとぼやけになることがあります。 '' res/drawable-ldpi/'は120dpi、' 'res/drawable-mdpi /' 'は160dpiなど、あなたがサポートしているすべてのリソースディレクトリの1つです。 。通常、すべての密度でdrawableを発送しませんが、良い結果を得て、ヒープ消費については合理的であるほど十分です。しかし、「良い結果」はアートワーク全体に左右されます。 – CommonsWare

    関連する問題