画像をdpiに応じてリサイズする方法

dpiとは1インチ(2.54cm)平方当たりのドット数を表したものです。

このdpiにはhdpiやxdpiなどのおおまかな区分があり、現在(2015年)では次の5つのdpiがあります。

dpiの名前dpiの値
ldpi120(dpi)
mdpi160(dpi)
hdpi240(dpi)
xhdpi320(dpi)
xxhdpi480(dpi)

端末でこのようなdpiの種類をコードから取得してそれに応じて画像サイズを変える例が次のコードです。

public class MainActivity extends Activity
{
    
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DisplayMetrics dm = new DisplayMetrics();
        ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay().getMetrics(dm);
        int dpi = dm.densityDpi;
            //dpiの大きさを取得
        
        ImageView imageView = (ImageView) findViewByID(R.id.image_view);
        Bimap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
        image.setDensity(dpi);
            //dpiの値に応じて画像リサイズ
        imageView.setImageBitmap(bitmap);
    }

}

DisplayMetricsクラスのdensityDpiメンバを調べればその端末のdpiの種類を知ることができます。

その後BitmapクラスのsetDensityメソッドに調べたdpiの数値を渡せば適切に画像をリサイズしてくれます。

ただしこのような方法を使うのはダウンロードした画像などに利用するのが適しています。リソースに組み込まれている画像は端末に応じたdpiごとに自動でリサイズされるのでこのような処理を行う必要はありません。

関連項目
プライバシーポリシー