2017-12-01 19 views
1

私は新しいAndroidプロジェクトを作成し、ファイルをres/drawableフォルダに入れました。 fileコマンドによって報告されるように、その統計は、このようなものです:(。サイズ1000x846)Androidでjpgリソースを読み込むと、画像のサイズが変わるのはなぜですか?

map.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 200x200, segment length 16, baseline, precision 8, 1000x846, frames 3 

プロジェクトは分SDKのバージョン21と24

は、私は、ファイルを開くターゲットSDKのバージョンを使用していますこのような私のクラス(ビューサブクラスである)(Kotlin)に:エミュレータで実行

mBitmap = BitmapFactory.decodeResource(resources, R.drawable.map) 
Log.i(TAG, "Our map's size is " + mBitmap.width + "x" + mBitmap.height) 

(480X800 hdpi、APIレベル25)が1500年として、ビットマップのサイズを報告しますx1269、またはファイルのサイズから1.5倍にスケールされます。

デバイス(Samsung Galaxy A3、APIレベル24)で実行すると、2000x1692のサイズ、または2xの縮尺でレポートされます。

どうしてですか?読み込まれたビットマップのサイズにはどのようなものがありますか?

(ちなみに、resources.getDrawable()Drawable.getIntrinsicWidth()を経由して、リソースを読み取る別の方法は、同じサイズを報告します。)

答えて

0

私は/新しいAndroidプロジェクトを作成し、解像度にmap.jpgファイルを入れていますドロウアブルフォルダ

これは、ディレクトリの選択肢としてはあまりありません。

エミュレータで実行すると(480x800 hdpi、APIレベル25)、ビットマップのサイズは1500x1269、ファイルのサイズからは1.5xになります。

デバイス(Samsung Galaxy A3、APIレベル24)で実行すると、2000x1692のサイズ、または2xの縮尺でレポートされます。

どうしてですか?

res/drawable/にイメージを置くためです。これはres/drawable-mdpi/の同義語です。この画像はmdpiのスクリーン(約160dpi)用に設計されていると言われています。より関連性の高いピアディレクトリ(たとえばres/drawable-hdpi/)にこのリソースの他の亜種がない場合、Androidはあなたがいる画面の密度に合わせてリソースを拡大/縮小します。あなたのエミュレータはhdpiの設定です。あなたのGalaxy A3はxhdpiデバイスです。

この画像を濃度に基づいて縮尺しないようにしたい場合は、res/drawable-nodpi/またはres/drawable-anydpi/に入れます。

+0

ありがとうございます。いいえ、接尾辞のないバージョンは 'mdpi'の同義語で、スケーリングされていることは明白ではありませんでした。私は、「デフォルト」の資源源としての役割は、「触れない」ことを意味するとも考えました。 – Arry

+0

@Arry:いいえ、申し訳ありません。理由は、ドロアブル密度の概念がAndroid 1.5または1.6まで追加されていないためです。 Android 1.0と1.1では、すべてのドロウアブルは 'res/drawable /'にありました。後方互換性のために、元のAndroidデバイスで使用されていた密度の同義語として 'res/drawable /'を設定します: 'mdpi'。このルールは、これらの年の間、下位互換性を維持するために残っています。Googleではこれについて多くのことを話していませんし、 'res/drawable /'が汎用のものであるという印象を与えるAndroidスタジオのテンプレートでは愚かなことをしています。 – CommonsWare

関連する問題