谢谢关注!!
前言:华为开发学习专栏。如需了解谢谢查阅: 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
谢谢阅读,烦请关注:
后续将持续更新!!