densityDpiのおかしな関係

今回はdensityDpiについて、ちょっとおかしいんじゃないかな?って思う事を書きます。

androidの知り合いがいないもので(ぼっちです!)確認方法もないので、間違ってたら、コメントとかくれると嬉しいです。

DisplayMetrics metrics = new DisplayMetrics();  
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Log.d("density", Float.toString(metrics.densityDpi));
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.drawable.fb, options);
Log.d("width", Integer.toString(options.outWidth));
Log.d("height", Integer.toString(options.outHeight));
Log.d("density", Integer.toString(options.inDensity));
options.inJustDecodeBounds = false;
Bitmap _bm = BitmapFactory.decodeResource(getResources(), R.drawable.fb, options);
Log.d("width", Integer.toString(_bm.getWidth()));
Log.d("height", Integer.toString(_bm.getHeight()));
Log.d("density", Integer.toString(_bm.getDensity()));

と言うソースコードを書くと、簡単に上から、端末のdensityDpiを取得して、BitmapFactoryで内部に読み込まないで大きさとdensityDpiを出して、中に読み込んだらビットマップでサイズとdensityDpiを確認するって方法を取りました。この時fbって言う画像をいれておいたのですが、

06-06 12:20:09.250: D/density(13976): 1.5
06-06 12:20:09.250: D/density(13976): 240.0
06-06 12:20:09.253: D/width(13976): 100
06-06 12:20:09.253: D/height(13976): 100
06-06 12:20:09.253: D/density(13976): 160
06-06 12:20:09.253: D/width(13976): 150
06-06 12:20:09.257: D/height(13976): 150
06-06 12:20:09.257: D/density(13976): 240

で、ぱっと見BitmapFactoryで中に読み込まれる際にdensityDpiが、端末のサイズに変更されるのかな?って思いますが。

注目したいのは密度(160→240)なのにサイズ(100→150)となっている部分です。

密度上げるって事は「ぎゅっ」とするはずなのに、サイズなんで大きくなってるの?馬鹿なの?死ぬの?

ってな訳でdrawableに置いた画像をそのまま読み込みとよく分からないサイズになるのはよしとして、ぼけて見えてた原因はこいつっぽいなー。

と疑心難儀ではあるのですが、誰も突っ込みをいれてるところを見たことがないので、そのままほうっておいたのですが。

おかしいような気がします。お気をつけください。

前後の記事

前の記事:

次の記事:

関連の記事

コメント

:D Kunox3340

DPIはDot Per Inchで1インチあたりのドット数。240DPIというのは1インチあたり240ドットあると言うことですね。Androidでは基準を160DPIに決めているようですから、240DPIの端末はmetrics.densityDpiでは160の1.5倍ですから1.5という数字が帰ってきます。これは1.5倍の密度という意味で、1より「ぎゅっ」としています。
fbという画像は100ドット x100ドットの画像なようですね。従ってこれを「同じ大きさで表示しようとする」と100Dotのものは1.5倍のドットを使わないと表示できない事になり、150ドットになります。例えばfbの画面上の大きさが1インチだとすると1インチに100ドット(160DPIのとき)の画像は240DPIだと150ドット並べないと1インチにならない、と言うことです。したがって、同じ長さのところに100ドットではなく150ドットあるわけで、ぎゅっと詰まっていることになります。

:D admin

Kunox3340さま

コメントありがとうございます。大変よくわかりました。
つまりアンドロイド側では、
>「同じ大きさで表示しようとする」
という訳で、画質は荒れてしまうのはしょうがないと言う訳ですね。

画像解像度が低い画像を画面解像度の高い端末で表示したら
荒れると言うのは、当たり前の事なんですが、意識してなかったので、
荒れる意味を理解できてなかったです。

ありがとうございます!!

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑