图像缩放方法

时间:2013-04-02 10:09:35

标签: android

我想在屏幕上以2 x 2网格格式显示4张图像。图像来自谷歌图像搜索,图像是200×200的正方形

这是我扩展它们的方法。 RelativeLayout有4个嵌套的RelativeLayout,每个布局都有imageView。这就是我获得屏幕宽度来缩放图像的方法。将内部layoutparams的高度和宽度设置为screenWidth / 2,然后缩放图像。

这是我正在做的,以获得特定屏幕的图像高度和宽度。例如,如果屏幕宽度为550,那么我的图像尺寸将为275 x 275.

public static int getOptionWidth(Context context) {
    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
    return metrics.widthPixels;
}

optionWidth = (getOptionWidth(context) / 2)

这是针对未缩放的位图

public static Bitmap resourceDecoder(byte[] imgBytes, int destWidth, int destHeight) {
    Options options = new Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeByteArray(imgBytes, 0, imgBytes.length, options);
    options.inJustDecodeBounds = false;


    float srcAspect = (float) srcWidth / (float) srcHeight;
    float dstAspect = (float) dstWidth / (float) dstHeight;

        if (srcAspect > dstAspect) {
            options.inSampleSize = srcHeight / dstHeight;
        } else {
            options.inSampleSize = srcWidth / dstWidth;
        }
    Bitmap unscaledBitmap = BitmapFactory.decodeByteArray(imgBytes, 0, imgBytes.length, options);

    return unscaledBitmap;
}

这将是我的目的地宽度和高度,因为我需要正方形的图像。我已经实现了获取源矩形(getSrcRect)和获取目标矩形(getDstRect)的基本方法

Rect srcRect = getSrcRect(unscaledBitmap.getWidth(), unscaledBitmap.getHeight(), dstWidth, dstHeight);
Rect dstRect = getDstRect(unscaledBitmap.getWidth(), unscaledBitmap.getHeight(), dstWidth, dstHeight);
Bitmap scaledBitmap = Bitmap.createBitmap(dstRect.width(), dstRect.height(), Config.ARGB_8888);
Canvas canvas = new Canvas(scaledBitmap);
canvas.drawBitmap(unscaledBitmap, srcRect, dstRect, new Paint(Paint.FILTER_BITMAP_FLAG));

return scaledBitmap;

这个工作正常,结果正如预期的那样(在hdpi,xhdpi和mdpi上测试)。但现在我很困惑,因为我不使用dxtopx或pxTodX转换。我错过了什么吗?虽然结果如预期,但我对此方法并不担心。我不知道我应该使用pxToDx,反之亦然。如果我这样做会如何影响我的结果,我应该如何使用它们。

1 个答案:

答案 0 :(得分:0)

您不必为此使用PX到DP转换,因为您已使用getOptionWidth(context)设置了相对于屏幕宽度的所有大小变量。