1.最初にいくつかの基本的な概念を見てください
●解像度:解像度は電話画面ですピクセル数、一般に画面の「幅×高さ」と呼ばれるAndroid電話の画面の一般的な解像度は、480×800、720×1280、1080×1920などです。720×1280は、画面の幅方向が720ピクセル、高さ方向が1280ピクセルであることを意味します。
●画面サイズ:画面サイズは、携帯電話の対角線上の物理サイズで、インチ(インチ)単位です。たとえば、ある携帯電話は「5インチ大画面携帯電話」で、対角サイズ5インチ×2.54cm /インチ= 12.7cmを指します。
●画面密度:1インチあたりのピクセル数であり、値が大きいほど表示が繊細になります。次に示すように、画面の対角線の長さ/画面サイズです。
Androidフォンの標準画面密度マップは次のとおりです。
xxx-hdpiの密度値は640で、解像度は3840 * 2160です。
2.画像が占めるメモリはどのように計算されますか?
最初に結論についてお話ししましょう。これは、次の状況に分けることができます。
今、写真があります:幅= 450ピクセル、高さ= 300ピクセル
1.リソースが携帯電話の画面密度と同じフォルダーに存在する場合、メモリ=画像の幅(ピクセル)と画像の高さ(ピクセル)、カラーフォーマットが占めるバイト数。
たとえば、お使いの携帯電話の解像度は xxhdpi、あなたは上の写真を持っています ドローアブル-xxhdpiフォルダ内の画像のカラーフォーマットはARGB-8888、つまりピクセルステーションあたり4バイトです。
画像が占めるメモリ= 450 * 300 * 4 = 540_000バイト= 527 kb
2.ファイルが電話画面の密度と同じフォルダーに存在しないが、リソースが電話画面の密度よりも大きいフォルダーに存在する場合、続行されますシュリンク対応する倍数の二乗。
xx-hdpiの密度値は480、xxx-hdpiの密度値は640です。
たとえば、お使いの携帯電話はまだです xxhdpi 、これであなたの写真が配置されます ドローアブル-xxxhdpiフォルダ
画像が占めるメモリ= 450 /(640/480)* 300 /(640/480)* 4 = 303_750バイト= 297kb
3.電話の画面密度よりも大きいフォルダーにリソースが見つからない場合は、電話の画面密度よりも小さいフォルダーを検索します。存在する場合は続行します。拡大対応する倍数の二乗。
たとえば、お使いの携帯電話はまだです xxhdpi 、これであなたの写真が配置されます ドローアブル-xhdpiフォルダ
xx-hdpiの密度値は480、x-hdpiの密度値は320です。
イメージが占めるメモリ= 400 *(480/320)* 350 *(480/320)* 4 = 1215_000バイト= 1187 kb
3、検証結果
電話があることを確認Huawei社のP40:
解像度:2340×1080
画面サイズ:6.1を
計算することができ、XX-hdpiである422の画面密度。
画像サイズ:450 * 300
検証1:電話の画面密度は、画像が配置されているフォルダの解像度と同じです。
つまり、画像はxx-hdpiディレクトリにも配置されます。
画像の幅と高さを計算します。
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.a1);
int width = bm.getWidth();
int height = bm.getHeight();
Log.e("ARouterMainActivity", "width = " + width + ", height = " + height);
上記の状況を確認できます1。
検証2:ファイルが電話画面の密度と同じフォルダーに存在しないが、リソースが電話画面の密度よりも大きいフォルダーに存在する場合:
つまり、幅=画像の幅450 /(640/480)=337.5です。
高さ=画像の幅300 /(640/480)= 225。
この時点でのメモリ= 337.5 * 225 * 4 = 303_750バイト
ケース2でも満足です、状況3確認はできません。興味がある場合は、自分で確認できます。
4.結論
- 電話の写真はカタログの解像度よりも小さいです。メモリの写真を共有すると、電話の密度/時間の正方形のディレクトリに対応する画像の密度が拡大されます。
- 携帯電話のディレクトリよりも大きな画像の解像度では、メモリの画像を共有すると、ディレクトリの密度/平方倍の携帯電話の密度に対応する画像が減少します。
- 等しい場合:画像の幅に等しい*画像の高さ*カラーフォーマットに対応するバイト数