You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何将Assets中Bitmap修改为960x720尺寸?

嘿,这个需求很容易解决!你现在的代码是创建了和原图一样大小的board Bitmap,然后直接把原图按原尺寸画上去,所以要改成目标尺寸的话,只需要调整board的创建尺寸,再让Canvas把原图缩放绘制进去就行。

直接给你修改后的代码,注释里标了关键改动:

InputStream in = null;
Bitmap bm = null;
try {
    in = getAssets().open(file);
    bm = BitmapFactory.decodeStream(in);
    
    // 关键改动1:创建960x720尺寸的目标Bitmap
    Bitmap board = Bitmap.createBitmap(960, 720, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(board);
    
    // 关键改动2:缩放绘制原图到整个board区域
    // 第一个参数是原图,第二个参数null表示使用整个原图作为源区域
    // 第三个参数是目标区域,这里直接填整个board的矩形,Canvas会自动缩放填充
    canvas.drawBitmap(bm, null, new Rect(0, 0, 960, 720), null);
    
    // 接下来就可以把board转换成OpenCV Mat了
    // Mat mat = new Mat();
    // Utils.bitmapToMat(board, mat);
} catch (IOException e) {
    e.printStackTrace();
} finally {
    // 别忘了关闭流和回收临时Bitmap,避免内存泄漏
    if (in != null) {
        try {
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    if (bm != null && !bm.isRecycled()) {
        bm.recycle();
    }
}

另外还有一种用Matrix实现缩放的方式,效果和上面一致,你也可以试试:

// 替代上面的drawBitmap行
Matrix scaleMatrix = new Matrix();
// 计算宽高的缩放比例
float scaleWidth = 960f / bm.getWidth();
float scaleHeight = 720f / bm.getHeight();
scaleMatrix.postScale(scaleWidth, scaleHeight);
canvas.drawBitmap(bm, scaleMatrix, null);

这里要提醒你:原图是360x240(比例3:2),目标尺寸是960x720(比例4:3),直接拉伸会导致图片变形。如果需要保持原图比例,同时填满目标区域(超出部分裁剪),可以用下面的逻辑调整绘制区域:

float scaleX = 960f / bm.getWidth();
float scaleY = 720f / bm.getHeight();
// 取较大的缩放比例,保证填满目标区域
float scale = Math.max(scaleX, scaleY);
float scaledWidth = bm.getWidth() * scale;
float scaledHeight = bm.getHeight() * scale;
// 计算居中偏移量
float offsetX = (960 - scaledWidth) / 2;
float offsetY = (720 - scaledHeight) / 2;
// 绘制时使用计算后的目标矩形
canvas.drawBitmap(bm, null, new RectF(offsetX, offsetY, offsetX + scaledWidth, offsetY + scaledHeight), null);

如果是要完整显示原图(留白),把Math.max换成Math.min即可。

内容的提问来源于stack exchange,提问作者Xwa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:37:28