如何缩放位图以保留相同的屏幕空间

时间:2018-07-25 11:41:09

标签: android bitmap draw dpi

我有位图,需要在运行时调整其大小。并且必须调整其大小,以便在任何屏幕上都可以容纳相同的屏幕空间。我试图像这样使用dp:

private int dpiToPx(int dp) {
    //return (int)(getResources().getDisplayMetrics().densityDpi * dp / 160f);
    return (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics());
}

并缩放位图:

Bitmap b2 = Bitmap.createScaledBitmap (
       b1,
       dpiToPx(225),
       dpiToPx(225),
       true
);

稍后,我将使用canvas.drawBitmap();

我一直在想,它将在任何屏幕上产生相同大小的位图。但是在320dpi屏幕和720 dpi屏幕上进行测试会产生很大的差异。

我该如何解决?

2 个答案:

答案 0 :(得分:0)

使用sdp库可能会对您有所帮助。 https://github.com/intuit/sdp

    Bitmap b2 = Bitmap.createScaledBitmap ( b1, 
    dpiToPx(getContext().getResources().getDimensionPixelSize(R.dimen._225sdp)),
    dpiToPx(getContext().getResources().getDimensionPixelSize(R.dimen._225sdp)), true );

答案 1 :(得分:0)

您可以使用它来确定设备的高度和宽度,并在.createScaledBitmap中使用它

DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();    
float dpHeight = displayMetrics.heightPixels / displayMetrics.density;
float dpWidth = displayMetrics.widthPixels / displayMetrics.density;