首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图像缩放方法

图像缩放方法
EN

Stack Overflow用户
提问于 2013-04-02 18:09:35
回答 1查看 67关注 0票数 0

我想在屏幕上显示2 x 2网格格式的4个图像。图片来自google图片搜索,图片是200X200的正方形

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

这是我正在做的事情,以获得特定屏幕的图像高度和宽度。例如,如果屏幕宽度是550,那么我的图像大小就是275 x 275。

代码语言:javascript
复制
public static int getOptionWidth(Context context) {
    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
    return metrics.widthPixels;
}

optionWidth = (getOptionWidth(context) / 2)

这适用于未缩放的位图

代码语言:javascript
复制
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)的基本方法

代码语言:javascript
复制
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还是反之亦然。如果我这样做了,它对我的结果有什么影响,我应该如何使用它们。

EN

回答 1

Stack Overflow用户

发布于 2013-04-02 20:07:57

您不必为此使用PX到DP转换,因为您已经使用getOptionWidth(上下文)设置了所有与屏幕宽度相关的大小变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15761427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档