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

Android开发如何不缩放原图增大Bitmap尺寸

Android 扩展Bitmap高度实现方案

核心实现逻辑是创建目标尺寸的新位图,先填充指定背景色,再将原始位图绘制到对应位置即可,不需要依赖第三方库。

目标位图效果对比

实现要点

  • 新位图宽度与原图保持一致,高度可自定义传入,需保证不小于原图高度
  • 新增区域支持任意自定义背景色,包括透明、黑色、白色
  • 支持配置原始位图在新图中的对齐方式:顶部对齐、底部对齐、垂直居中
  • 若需要透明背景,新位图的配置必须选择Bitmap.Config.ARGB_8888,否则透明通道不生效

可复用实现代码(Kotlin)

import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Color
import android.view.Gravity
import kotlin.require

/**
 * 扩展Bitmap高度,宽度保持与原图一致
 * @param originalBitmap 输入的原始位图
 * @param targetHeight 期望生成的新位图高度,必须大于等于原图高度
 * @param bgColor 新增空白区域的填充色,默认透明
 * @param originalGravity 原图在新位图中的垂直对齐方式,默认顶部对齐
 */
fun expandBitmapHeight(
    originalBitmap: Bitmap,
    targetHeight: Int,
    bgColor: Int = Color.TRANSPARENT,
    originalGravity: Int = Gravity.TOP
): Bitmap {
    val originWidth = originalBitmap.width
    val originHeight = originalBitmap.height
    // 校验参数合法性
    require(targetHeight >= originHeight) { "目标高度不可小于原始位图高度" }

    // 创建目标尺寸的新位图,ARGB_8888配置支持透明通道
    val resultBitmap = Bitmap.createBitmap(originWidth, targetHeight, Bitmap.Config.ARGB_8888)
    val canvas = Canvas(resultBitmap)
    // 先填充整个画布的背景色
    canvas.drawColor(bgColor)

    // 计算原图绘制的垂直偏移量
    val drawOffsetY = when (originalGravity) {
        Gravity.TOP -> 0f
        Gravity.BOTTOM -> (targetHeight - originHeight).toFloat()
        Gravity.CENTER_VERTICAL -> (targetHeight - originHeight) / 2f
        else -> 0f
    }
    // 将原图绘制到指定位置
    canvas.drawBitmap(originalBitmap, 0f, drawOffsetY, null)

    return resultBitmap
}

调用示例

// 示例1:高度扩展为原图2倍,新增区域透明,原图顶部对齐
val transparentBmp = expandBitmapHeight(
    originalBitmap = sourceBmp,
    targetHeight = sourceBmp.height * 2,
    bgColor = Color.TRANSPARENT
)

// 示例2:高度固定为1000px,新增区域白色,原图垂直居中
val whiteBgBmp = expandBitmapHeight(
    originalBitmap = sourceBmp,
    targetHeight = 1000,
    bgColor = Color.WHITE,
    originalGravity = Gravity.CENTER_VERTICAL
)

// 示例3:高度固定为1200px,新增区域黑色,原图底部对齐
val blackBgBmp = expandBitmapHeight(
    originalBitmap = sourceBmp,
    targetHeight = 1200,
    bgColor = Color.BLACK,
    originalGravity = Gravity.BOTTOM
)

注意事项

  • 若不需要透明背景,可将新位图配置改为Bitmap.Config.RGB_565,能减少约一半的内存占用,但该配置无Alpha通道,设置透明背景会显示为黑色
  • 生成的新位图不再使用时,需及时调用recycle()方法回收,避免Native内存泄漏
  • 不建议直接在原始Bitmap上做修改,尽量保留原图副本,避免影响其他依赖原图的业务逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:36:27