Android Bitmap 简介

Android Bitmap 简介

Bitmap (位图)是 Java 中常用的图片处理类,其中包含未压缩的图像信息:长、宽、颜色等。

Bitmap 颜色属性

其主要支持的颜色属性在 Bitmap.Config 的枚举中。

Bitmap.Config每个像素的大小(Byte)说明
ALPHA_81只有 8 位的透明度信息
RGB_5652有 R、G、B 信息,分别占5位、6位、5位
ARGB_44442有 R、G、B、A 信息,各占 4 位
ARGB_88884有 R、G、B、A 信息,各占 8 位(默认)
RGBA_F168有 R、G、B、A 信息,各占 16 位,其中信息以浮点形式存储
HARDWARE特殊参数,仅用于在图形内存中操作

Bitmap 格式属性

其支持的格式属性在 Bitmap.CompressFormat 的枚举中。

Bitmap.CompressFormat说明
JPEG(Joint Photographic Experts Group,JPEG)联合图像专家组的英文缩写,这个我们不用管它。我们在计算机中通常看到的是.JPG的后缀名文件,其实就是它的缩写格式。这是因为在很久以前计算机有这样一个规定,只用3位保存后缀名格式。JPEG是一个压缩标准,又可分为标准JPEG、渐进式JPEG及JPEG2000三种,那么这三种又有很大的区别:
标准 JPEG:支持最高级别的压缩,但是压缩是有损耗的。此类型图片在网页下载时只能由上而下依序显示图片,直到图片资料全部下载完毕,才能看到全貌。
渐进式 JPEG:标准JPEG的改良格式,可以在网页下载时,先呈现出图片的粗略外观后,再慢慢地呈现出完整的内容,渐进式JPG的文件比标准JPG的文件要来得小。
JPEG2000:新一代的影像压缩法,压缩品质更好,其压缩率比标准JPEG高约30%左右,同时支持有损和无损压缩。一个极其重要的特征在于它能实现渐进传输,即先传输图像的轮廓,然后逐步传输数据,让图像由朦胧 到清晰显示。
PNG便携式网络图形(Portable Network Graphics,PNG),它是一种无损压缩的位图图形格式,支持索引、灰度、RGB三种颜色方案以及Alpha通道等特性。最高支持1600万色,支持全透明/半透明,也包括复杂的图片透明。它的最大特点应该就是无损压缩,这也使得它拥有丰富的颜色显示效果,即使在压缩情况下也能做到不降低图像质量。
WEBPWebP格式,Google在2010年推出的新一代图片格式,也是Google开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器宽带资源和数据空间。WebP既支持有损压缩也支持无损压缩。相较编码JPEG文件,编码同样质量的WebP文件需要占用更多的计算资源。

裁剪

Bitmap createBitmap(Bitmap source, int x, int y, int width, int height);

缩放

Matrix matrix = new Matrix();
matrix.postScale(widthScale, heightScale); // widthScale, heightScale 是 float 类型的缩放比例
// Bitmap createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter);
Bitmap bitmapScale = Bitmap.create(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);

裁剪、缩放

显然,缩放提到的接口的 x, y, width, height 参数还能同时实现裁剪的功能。

Matrix matrix = new Matrix();
matrix.postScale(widthScale, heightScale); // widthScale, heightScale 是 float 类型的缩放比例
// 直接修改 x, y, width, height 参数实现裁剪;matrix 参数实现缩放
Bitmap createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter);

旋转、移动

Matrix 参数不仅仅可以实现缩放功能,还能实现旋转、移动。

Matrix matrix = new Matrix();
matrix.postRotete(-30); // 逆时针旋转30度。(正数值为顺时针旋转)
matrix.postTranslate(100, 80); // x 轴移动 100, y 轴移动 80
Bitmap createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter);

保存图像

File file = ... // 准备一个 file 对象。
try {
    FileOutputStream outputStream=new FileOutputStream(file);
    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream);
    outputStream.flush();
    outputStream.close();
} catch (IOException e) {
    e.printStackTrace();
}

以上是把 bitmap ,以 JPEG 格式 90 质量的存入 file 文件中。

int 数组转 Bitmap

可以将一个保存有 bitmap 图片信息的 int 数组转为 Bitmap 格式的图片。

(注意计算各个颜色格式的大小)

Bitmap createBitmap(int[] colors, int width, int height, Config config);

需要提供图片的 width, height,config(颜色格式)信息。

Bitmap 转 byte 数组

这里的 byte 数组是指无压缩的位图 byte 数组。(PNG、JPEG 等 byte 数组暂不介绍)

ByteBuffer buffer = ByteBuffer.allocate(bitmap.getByteCount());
bitmap.copyPixelsToBuffer(buffer);
byte[] bitmapBytes = buffer.array();

byte 数组转 Bitmap

其中一种是可以考虑 byte 数组构成 int 数组,走上面 int 数组转 Bitmap 的方式。

Bitmap stitchBmp = Bitmap.createBitmap(width, height, configType);
stitchBmp.copyPixelsFromBuffer(ByteBuffer.wrap(byteArray));

先配置好一个 Bitmap 实例(长、宽、颜色格式等),然后进行数据填充。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值