Android语言基础教程(162)Android图形图像处理技术绘图类之Bitmap类:Bitmap魔法:Android图像处理从入门到上头

🎨 认识Android的图形天团:Bitmap是何方神圣?

在Android中,**Bitmap(位图)**本质上是一个存储像素数据的类。简单来说,一张图片在内存中就是以Bitmap的形式存在的——它保存着每个像素的颜色信息。

想象一下十字绣或者马赛克画,Bitmap就是这样由无数个微小像素点组成的数字图像。每个像素点都包含自己的颜色信息,当亿万个这样的点组合在一起,就形成了我们在屏幕上看到的图片。

但Bitmap并不是孤军奋战的,它还有几个黄金搭档:

  • Canvas(画布):提供draw系列API,通过draw函数(绘制线、矩形、圆、椭圆等),把绘制结果写入到bitmap对象中。可以把它想象成画家的画布,提供了各种绘画方法。
  • Paint(画笔):描述绘制内容的属性(颜色、样式)。就像画家的画笔,决定画什么颜色、什么风格。
  • Drawable:2D图形的高度抽象。相比Bitmap,Drawable更轻量,且能自适应不同分辨率。

Bitmap在Android图形系统中扮演着不可或缺的角色。无论是简单的图片显示,还是复杂的图像处理,都离不开它。但这位能力强大的伙伴也是个“内存大户”,如果使用不当,很容易导致OOM(Out Of Memory)问题。

所以,想要成为一名优秀的Android开发者,Bitmap的使用和优化是必修课!

🔧 Bitmap创建大全:多种方法任君选择

创建Bitmap对象的方法多种多样,就像去餐厅点菜一样,你可以根据不同的“口味”选择不同的方法。

从资源文件中创建

最简单的创建方式就是从res/drawable或res/mipmap目录中的图片资源创建Bitmap:

// 方法1:通过BitmapFactory解码资源
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image);

// 方法2:先获取Drawable,再转换为Bitmap
Drawable drawable = getResources().getDrawable(R.drawable.my_image);
if (drawable instanceof BitmapDrawable) {
    Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
}

从文件系统中创建

如果需要加载设备存储中的图片文件,可以使用:

// 从指定路径加载图片
String path = "/sdcard/pictures/my_image.jpg";
Bitmap bitmap = BitmapFactory.decodeFile(path);

// 或者通过FileDescriptor加载
FileInputStream fis = new FileInputStream(path);
Bitmap bitmap = BitmapFactory.decodeFileDescriptor(fis.getFD());

从流中创建

从网络或数据流中创建Bitmap也很常见:

// 从输入流创建
InputStream is = context.getResources().openRawResource(R.drawable.app_sample_code);
Bitmap bitmap = BitmapFactory.decodeStream(is);

// 从字节数组创建
byte[] imageData = getImageDataFromNetwork();
Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);

手动创建空白Bitmap

有时候,我们需要创建一个空白的Bitmap作为画布:

// 创建一个指定宽度、高度和像素格式的空白Bitmap对象
Bitmap bitmap = Bitmap.createBitmap(800, 600, Bitmap.Config.ARGB_8888);

// 从颜色数组创建Bitmap
int[] colors = {Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW};
Bitmap bitmap = Bitmap.createBitmap(colors, 2, 2, Bitmap.Config.RGB_565);

每种创建方法都有其适用场景,选择合适的方法能让你的代码更高效!

🧠 Bitmap内存管理:告别OOM的噩梦

Bitmap是Android中最大的内存消耗者之一,这也是很多开发者头疼的问题。但别担心,只要掌握了正确的方法,OOM问题是可以避免的!

Bitmap内存计算

首先,我们要了解Bitmap占用内存的计算公式:

内存大小 = 图片宽度 × 图片高度 × 每个像素占用的字节数

其中,每个像素占用的字节数由Bitmap.Config决定:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值