Android Jetpack Compose中奖两张图片合并成一张 Bitmap

谢谢关注!!

前言:华为开发学习专栏。如需了解谢谢查阅: http://t.csdnimg.cn/01PQ2

一、直接上代码

1、可裁剪:cropBitmapCenter

2、根据 left、top参数设置覆盖在上面的 bitmap的位置:

left = 15

top = 8

Kotlin 复制代码
@Composable
fun MergeImageToBitmap(type: Int, imageResOne: Int, imageResTwo: Int) :Bitmap{
    // 获取上下文
    val context = LocalContext.current

    // 等待图片加载完成
    val bitmap1 = BitmapFactory.decodeResource(context.resources, imageResOne)
    val bitmap2 = BitmapFactory.decodeResource(context.resources, imageResTwo)
    var left = 15
    var top = 8
    var croppedBitmap = cropBitmapCenter(bitmap1, (bitmap2.width / 6) * 4, bitmap2.height - 20)
    var croppedBitmap2 = cropBitmapCenter(bitmap2, (bitmap2.width / 7) * 5, bitmap2.height)
    when (type) {
        0 -> {
             left = 15
             top = 8
            croppedBitmap = cropBitmapCenter(bitmap1, (bitmap2.width / 6) * 4, bitmap2.height - 20)
            croppedBitmap2 = cropBitmapCenter(bitmap2, (bitmap2.width / 7) * 5, bitmap2.height)
        }

        1 -> {
             left = 60
             top = 60
            croppedBitmap = cropBitmapCenter(bitmap1, (bitmap2.width /7) * 4, (bitmap2.width / 7) *4)
            croppedBitmap2 = cropBitmapCenter(bitmap2, (bitmap2.width / 5) * 4, (bitmap2.width / 5) * 4)
        }

        2 -> {
            left = 30
            top = 23
            croppedBitmap = cropBitmapCenter(bitmap1, (bitmap2.width)-60 , ((bitmap2.height/7) * 4)-15)
            croppedBitmap2 = cropBitmapCenter(bitmap2, (bitmap2.width) , (bitmap2.height/ 6) * 4)
        }
    }


    // 确保两个 Bitmap 有相同的宽度和高度,或者根据需要调整
    val width = maxOf(bitmap1.width, bitmap2.width)
    val height = maxOf(bitmap1.height, bitmap2.height)

    // 创建一个新的 Bitmap 来容纳合并后的图像
    val mergedBitmap = Bitmap.createBitmap(bitmap2.width, bitmap2.height, Bitmap.Config.ARGB_8888)

    // 使用 Canvas 将两个 Bitmap 绘制到合并的 Bitmap 上
    Canvas(mergedBitmap).apply {
        drawBitmap(croppedBitmap, left.toFloat(), top.toFloat(), null)
        drawBitmap(croppedBitmap2, 0f, 0f, null) // 在第一个图像下方绘制第二个图像
    }

//    val viewModel = viewModel<BaseViewMode>(factory = MyViewModelFactory)
//    viewModel.setBitmap(mergedBitmap)
   return mergedBitmap
}

@Composable
fun cropBitmapCenter(bitmap: Bitmap, desiredWidth: Int, desiredHeight: Int): Bitmap {
    // 计算原始Bitmap的中心点
    val centerX = bitmap.width / 2
    val centerY = bitmap.height / 2
    // 计算裁剪区域的左上角坐标
    val left = centerX - desiredWidth / 2
    val top = centerY - desiredHeight / 2
    // 创建裁剪区域
    val cropRect = Rect(left, top, left + desiredWidth, top + desiredHeight)
    // 创建一个新的Bitmap对象,用于存放裁剪后的图像
    val croppedBitmap = Bitmap.createBitmap(desiredWidth, desiredHeight, bitmap.config)
    // 开始裁剪
    val canvas = Canvas(croppedBitmap)
    canvas.drawBitmap(bitmap, cropRect, Rect(0, 0, desiredWidth, desiredHeight), null)
    // 返回裁剪后的Bitmap
    return croppedBitmap
}
HarmonyOs开发更新中:http://t.csdnimg.cn/vVSkV

谢谢阅读,烦请关注:

后续将持续更新!!

相关推荐
众拾达人3 小时前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言
吃着火锅x唱着歌4 小时前
PHP7内核剖析 学习笔记 第四章 内存管理(1)
android·笔记·学习
_Shirley5 小时前
鸿蒙设置app更新跳转华为市场
android·华为·kotlin·harmonyos·鸿蒙
hedalei7 小时前
RK3576 Android14编译OTA包提示java.lang.UnsupportedClassVersionError问题
android·android14·rk3576
锋风Fengfeng7 小时前
安卓多渠道apk配置不同签名
android
枫_feng7 小时前
AOSP开发环境配置
android·安卓
叶羽西8 小时前
Android Studio打开一个外部的Android app程序
android·ide·android studio
qq_171538859 小时前
利用Spring Cloud Gateway Predicate优化微服务路由策略
android·javascript·微服务
Vincent(朱志强)10 小时前
设计模式详解(十二):单例模式——Singleton
android·单例模式·设计模式
mmsx11 小时前
android 登录界面编写
android·登录界面