Bitmap.createScaledBitmap造成的困扰

本文探讨了拍照识别项目中照片未全屏显示的问题,分析了Bitmap.createScaledBitmap方法导致的比例缩放原因,并提供了一个替代方案,使用Bitmap.createBitmap确保照片全屏显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做的项目是拍照识别,同事写的,老板反映拍的照片没有全屏,找了半天才发现是,相机返回的照片在创建bitmap的时候,同事用的是这个Bitmap.createScaledBitmap,大家看看源码

public static Bitmap createScaledBitmap(@NonNull Bitmap src, int dstWidth, int dstHeight,
        boolean filter) {
    Matrix m = new Matrix();

    final int width = src.getWidth();
    final int height = src.getHeight();
    if (width != dstWidth || height != dstHeight) {
        final float sx = dstWidth / (float) width;
        final float sy = dstHeight / (float) height;
        m.setScale(sx, sy);
    }
    return Bitmap.createBitmap(src, 0, 0, width, height, m, filter);
}

final float sx = dstWidth / (float) width;

final float sy = dstHeight / (float) height;

m.setScale(sx, sy);

这三行代码对你传进去的宽高和bitmap的宽高进行了比例缩放,所以图片显示到 Imageview上不是实际bitmap的宽高,所以造成上面所说的拍出来的是全屏,实际显示不是全屏。

后面我用了下面这个方法就好了

public static Bitmap createBitmap(@NonNull Bitmap src) {
    return createBitmap(src, 0, 0, src.getWidth(), src.getHeight());
}

 

`Bitmap.createBitmap()` 是 Android 开发中用于创建一个新的 bitmap 的方法。该方法可以从一个已有的 bitmap 中创建一个新的 bitmap,并且可以指定一个矩形区域、变换矩阵等参数来创建。至于“添加像素格式”的表述,可能指的是创建 bitmap 时要指定 bitmap 的像素配置(也就是像素格式)。在 Android 中,可以通过 Bitmap.Config 枚举来指定不同的像素配置。通常情况下,如果要指定像素格式,你可以在 `createBitmap` 方法调用之前通过 `bitmap.getConfig()` 获取到原有 bitmap 的配置,然后创建一个新的配置对象。 以下是一个示例代码片段,展示了如何使用 `Bitmap.createBitmap` 方法并指定像素格式: ```java Bitmap originalBitmap = // 获取原始的bitmap对象 Bitmap.Config config = originalBitmap.getConfig(); // 获取原有bitmap的配置 if (config == null) { config = Bitmap.Config.ARGB_8888; // 如果原始bitmap配置为空,则默认使用ARGB_8888格式 } Bitmap newBitmap = Bitmap.createBitmap( originalBitmap, // 原始bitmap对象 0, 0, // 要复制的区域起点坐标(x, y) originalBitmap.getWidth(), originalBitmap.getHeight(), // 要复制的区域大小(宽,高) null, // 变换矩阵,如果不进行变换则可以传递null true // 是否过滤,如果为true则使用双线性过滤 ); newBitmap.setConfig(config); // 设置新bitmap的像素配置 ``` 请注意,这里的方法调用中并没有直接在 `createBitmap` 的参数中指定像素格式,而是在创建新 bitmap 之后,使用 `setConfig` 方法来设置其配置。Android 的 `createBitmap` 方法本身不提供直接设置像素格式的参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值