Android中图片处理之Bitmap

目录

1、BitMap 的基本概述

2、创建BitMap

 1、通过Bitmap.createBitmap()方法创建BitMap。

  2、通过BitmapFactory创建BitMap。

       1、创建bitmap

    2、BitmapFactory.Options的属性解析

3、BitMap的常用处理方式

1、BitMap的压缩

  2、BitMap的Bitmap.Config属性:

  3. BitMap的压缩格式

4、BitMap的内存优化

5、BitMap的其他相关操作


1、BitMap 的基本概述

1、 BitMap 即位图,图片在内存中的表达方式。由bit(位)map- (key-value)的方式读取像素。

2、Bitmap 用于图片的处理,实现了Parcelable接口(序列化) ,在Android中对图片的操作,大量用到bitmap

3、BitmapFactory:创建bitmap的辅助类。

4、BitMap 读取到内存中会占用很大的内存:可以通过图片的高宽来计算占用的内存:

图片的占用内存 = 图片的长度 * 图片的宽度 * 单位像素所占字节数(例如 ARGB_8888,这个模式下,一个像素点占用 4Byte)。

注意:如果读取的图片是从资源文件夹里面读取的话:

图片的占用内存 = 图片的长度 *图片的宽度* (inTargetDensity / inDensity)* 单位像素所占字节数(例如 ARGB_8888,这个模式下,一个像素点占用 4Byte)

以上可以看出 bitMap所占用的内存只跟图片的长宽和手机的逻辑密度有关,即 bitmap进行质量压缩后并不改变 bitmap占用内存的大小。

 

 

2、创建BitMap

 1、通过Bitmap.createBitmap()方法创建BitMap。

            Bitmap 的构造方法是受保护的,所以创建BitMap需要Bitmap.createBitmap()方法

            

创建Bitmap方法相关方法:
1、Bitmap createBitmap (Bitmap src)
从源位图中返回一个不可变的源位图,新的位图可能和源位图相同,或者是源位图的一个副本


2、 Bitmap createBitmap (int width, int height, Bitmap.Config config)
返回一个指定了高宽的,可变的位图。(创建了一个有指定高宽的空位图)
int width    位图的宽
int height   位图的高
config        位图的压缩格式(默认三种)


3、 Bitmap createBitmap (Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
从指定的源位图的子集返回一个位图,新的位图可能与源相同的对象,或可能是一个副本。初始化与原始位图相同的密度。
(从原始位图剪切图像,可以用Matrix(矩阵)来实现旋转等高级方式截图)

source   bitmap产生子位图的源位图;
x int         子位图第一个像素在源位图的X坐标
y int          子位图第一个像素在源位图的y坐标
width int     子位图行的像素点个数
height int    子位图列的像素点个数
m  Matrix     对像素值进行变换的可选矩阵
filter boolean    如果为true,源图要被过滤。该参数仅在matrix包含不仅仅是翻转才起效
Returns Bitmap      一个描述了源图指定子集的位图


4、 public static Bitmap createBitmap (int[] colors, int width, int height, Bitmap.Config config) 

返回一个指定了高宽的不变的位图,颜色的像素值设置为相应的值的数组colors.

colors   int[]    用来初始化像素。这个数组的长度必须>=width*height
(此函数指定了眼色数组,指定了高宽来创建的位图)
 config        位图的压缩格式(默认三种)


5、 public static Bitmap createBitmap (int[] colors, int offset, int stride, int width, int height, Bitmap.Config config)
offset     colors中颜色值的偏移量,(即跳过前offset的颜色值)
stride     颜色数组之间的间距 (值 must be >=width or <= -width)

(1-5的初始密度由getDensity()决定)

 

6、public static Bitmap createBitmap(DisplayMetrics display, int[] colors, int offset, int stride, int width, int height, Config config)

与5比较多了一个参数 DisplayMetrics ,指定了它的初始密度由DisplayMetrics决定

 

  2、通过BitmapFactory创建BitMap。

       1、创建bitmap

     BitmapFactory是创建BitMap的工厂类,BitmapFactory提供了四类方法:decodeFile、decodeResource、decodeStream、        decodeByteArray  加载位图

     1、 从文件中获取BitMap:

通过文件流获取BitMap:

 try {
    FileInputStream in = new FileInputStream("/sdcard/Download/test.png");
} catch (FileNotFoundException e) {
    e.printStackTrace();

Bitmap bitmap = BitmapFactory.decodeStream(in);

//-------------------------------------------------------------------------

通过文件路径获取BitMap:

String 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值