缩放每个分辨率的位图

时间:2014-01-28 01:04:51

标签: android bitmap scale resolution

是否有任何方法可以获得电话分辨率(或dp)并相应地缩放位图?我将所有图像都放在xhdpi文件夹中,目前它们不按照应有的方式进行扩展。

我想要一种高效且内存友好的方法,可以自动进行缩放。如果没有,那么下一个最好的东西是什么?对我来说是全新的领域。所以任何教程链接也都是appriciated。

这是我用来加载位图atm:

public Bitmap loadBitmap(int resourceID) {
    Options options = new BitmapFactory.Options();
    options.inScaled = true;
    options.inPreferredConfig = Bitmap.Config.RGB_565;
    Bitmap tempBmp = null;
    try {
        tempBmp = BitmapFactory.decodeResource(getResources(), resourceID,
                options);
    } catch (OutOfMemoryError e) {

    } catch (Error e) {

    }
    return tempBmp;
}

1 个答案:

答案 0 :(得分:1)

如果您想为每个手机分辨率缩放位图,您应该知道手机屏幕尺寸和比例。

此代码将返回宽度(w)&屏幕高度(h)。

DisplayMetrics dMetrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(dMetrics);
float density = dMetrics.density;
int w = Math.round(dMetrics.widthPixels / density);
int h = Math.round(dMetrics.heightPixels / density);

活动是活动的实例,您希望获得屏幕大小。

您必须记住:当您的设备处于横向时,w&gt; H。当它处于纵向时w <小时。

所以从宽度和宽度您可以检测设备的高度是朝哪个方向。

示例:

来自w&amp; h设备和比率(您想要缩放)您可以计算新的位图大小以进行缩放。

public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) {
    int width = bm.getWidth();
    int height = bm.getHeight();
    float scaleWidth = ((float) newWidth) / width;
    float scaleHeight = ((float) newHeight) / height;
    // CREATE A MATRIX FOR THE MANIPULATION
    Matrix matrix = new Matrix();
    // RESIZE THE BIT MAP
    matrix.postScale(scaleWidth, scaleHeight);

    // "RECREATE" THE NEW BITMAP
    Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
    return resizedBitmap;
}