Android Bitmap.createBitmap() 用法全解析

Android Bitmap.createBitmap() 用法全解析

在 Android 开发中,Bitmap.createBitmap() 是一个非常强大的方法,可以用来 创建新的位图 ,并且可以 进行旋转、缩放、平移、镜像翻转、裁剪等操作 。本篇文章将详细介绍 Bitmap.createBitmap() 的各种用法。


1. Bitmap.createBitmap() 基础用法

1.1 创建一个空白 Bitmap

arduino 复制代码
val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
  • width:Bitmap 的宽度。
  • height:Bitmap 的高度。
  • Bitmap.Config.ARGB_8888:像素格式,支持透明度。

用途 :用于创建空白的 Bitmap,然后通过 Canvas 进行绘制。


2. 旋转(Rotate)

如果拍照后的图片方向不正确,可以使用 Matrix 进行旋转。

kotlin 复制代码
fun rotateBitmap(bitmap: Bitmap, degree: Int): Bitmap {
    val matrix = Matrix()
    matrix.postRotate(degree.toFloat()) // 旋转 degree 度
    return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
}
  • postRotate(degree):将图片旋转指定角度。

示例:旋转 90 度

ini 复制代码
val rotatedBitmap = rotateBitmap(originalBitmap, 90)

3. 缩放(Scale)

如果想要调整图片大小,可以使用 postScale()

kotlin 复制代码
fun scaleBitmap(bitmap: Bitmap, sx: Float, sy: Float): Bitmap {
    val matrix = Matrix()
    matrix.postScale(sx, sy) // 设置缩放比例
    return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
}

示例:缩小 50%

ini 复制代码
val scaledBitmap = scaleBitmap(originalBitmap, 0.5f, 0.5f)

4. 平移(Translate)

可以使用 postTranslate() 来移动 Bitmap 位置。

kotlin 复制代码
fun translateBitmap(bitmap: Bitmap, dx: Float, dy: Float): Bitmap {
    val matrix = Matrix()
    matrix.postTranslate(dx, dy) // X 方向右移 dx,Y 方向下移 dy
    return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
}

示例:右移 50px,下移 100px

ini 复制代码
val translatedBitmap = translateBitmap(originalBitmap, 50f, 100f)

5. 镜像翻转(Flip)

5.1 左右翻转(水平镜像)

kotlin 复制代码
fun flipHorizontal(bitmap: Bitmap): Bitmap {
    val matrix = Matrix()
    matrix.postScale(-1f, 1f) // 水平方向镜像
    return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
}

5.2 上下翻转(垂直镜像)

kotlin 复制代码
fun flipVertical(bitmap: Bitmap): Bitmap {
    val matrix = Matrix()
    matrix.postScale(1f, -1f) // 垂直方向镜像
    return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
}

示例:左右翻转

ini 复制代码
val flippedBitmap = flipHorizontal(originalBitmap)

6. 裁剪(Crop)

如果只想截取 Bitmap 的一部分,可以使用:

kotlin 复制代码
fun cropBitmap(bitmap: Bitmap, x: Int, y: Int, width: Int, height: Int): Bitmap {
    return Bitmap.createBitmap(bitmap, x, y, width, height)
}

示例:从 (50,50) 开始,裁剪 200x200 区域

ini 复制代码
val croppedBitmap = cropBitmap(originalBitmap, 50, 50, 200, 200)

7. 综合变换:旋转 + 缩放 + 平移

可以组合多个变换,比如 先旋转 45°,再缩小 80%,然后平移

kotlin 复制代码
fun transformBitmap(bitmap: Bitmap): Bitmap {
    val matrix = Matrix()
    matrix.postRotate(45f)      // 旋转 45 度
    matrix.postScale(0.8f, 0.8f) // 缩小 80%
    matrix.postTranslate(100f, 50f) // 右移 100,下移 50
    return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
}

示例:应用组合变换

ini 复制代码
val transformedBitmap = transformBitmap(originalBitmap)

8. 总结

操作 方法 示例
创建空白 Bitmap Bitmap.createBitmap(width, height, config) Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888)
旋转 postRotate(degree) postRotate(90f)
缩放 postScale(sx, sy) postScale(0.5f, 0.5f)
平移 postTranslate(dx, dy) postTranslate(50f, 100f)
水平翻转 postScale(-1f, 1f) postScale(-1f, 1f)
垂直翻转 postScale(1f, -1f) postScale(1f, -1f)
裁剪 Bitmap.createBitmap(bitmap, x, y, w, h) Bitmap.createBitmap(bitmap, 50, 50, 200, 200)

📌 结论:

Bitmap.createBitmap() 不仅能创建 Bitmap,还能旋转、缩放、平移、镜像翻转、裁剪,几乎所有图片变换都可以搞定! 🚀

希望这篇文章能帮你更好地理解 Bitmap.createBitmap() 的使用! 😊

相关推荐
子兮曰1 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰1 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万1 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝1 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋1 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁1 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95271 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大1 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师1 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学1 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端