目录
1、通过Bitmap.createBitmap()方法创建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