Bitmap学习日记以及android:ScaleType的属性
警言:慎终如始!
摘要:在android系统当中,bitmap是图像处理最重要的类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。
首先我们已经知道已经知道Bitmap在Android的图像处理中占有举足轻重的作用,既然那么重要,下面我们我们一起学习下它的基本用法.
1.获取Bitmap
(1)从资源文件中得到图片
Bitmap rawBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.aaa);
(2)从SD卡中得到图片(读取文件)
Bitmap rawBitmap1 = BitmapFactory.decodeFile(String filePath, null);
(3)从SD卡中得到图片(输入流的形式)
InputStream inputStream=getBitmapInputStreamFromSDCard("aa.jpg");
Bitmap rawBitmap2 = BitmapFactory.decodeStream(inputStream);
2.图片处理
// 得到图片原始的高宽
int rawHeight = rawBitmap.getHeight();
int rawWidth = rawBitmap.getWidth();
// 设定图片新的高宽
int newHeight = 500;
int newWidth = 500;
// 计算缩放比例
float heightScale = ((float) newHeight) / rawHeight;
float widthScale = ((float) newWidth) / rawWidth;
// 创建矩阵
Matrix matrix = new Matrix();
//设置缩放比例
(1)matrix.postScale(heightScale, widthScale);
// 设置图片的旋转角度
(2)matrix.postRotate(-30);
// 设置图片的倾斜
(3)matrix.postSkew(0.1f, 0.1f);
//生成处理后的图片
Bitmap newBitmap = Bitmap.createBitmap(rawBitmap, 0, 0, rawWidth,rawWidth, matrix, true);
(4)图片圆角处理
Bitmap roundCornerBitmap=this.toRoundCorner(rawBitmap, 40);
imageView.setImageBitmap(roundCornerBitmap);
3.图片存储
(1)保存到Sd卡
this.compressAndSaveBitmapToSDCard(newBitmap, "aa.jpg", 80);
(2)这个方法较为常用,按输出流存储,其中 quality参数一般为80,数值过大,会导致图片变大
compress(Bitmap.CompressFormat.JPEG, quality, fileOutputStream);
4.图片回收
在Android应用里,最耗费内存的就是图片资源。而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常。所以,对于图片的内存优化,是Android应用开发中比较重要的内容。所以尽可能的回收释放Bitmap资源
// 先判断是否已经回收
if(bitmap !=null&& !bitmap.isRecycled()){
// 回收并且置为null
bitmap.recycle();
bitmap =null;
}
System.gc();
5.android:ScaleType的使用
android:scaleType是控制图片如何resized/moved来匹对ImageView的size。ImageView.ScaleType /
android:scaleType值的意义区别:
(1)CENTER /center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分
显示
(2)CENTER_CROP / centerCrop 按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长
(宽)
(3)CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片
长/宽等于或小于View的长/宽
(4)FIT_CENTER / fitCenter 把图片按比例扩大/缩小到View的宽度,居中显示
(5)FIT_END / fitEnd 把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置
(6)FIT_START / fitStart 把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置
(7)FIT_XY / fitXY 把图片 不按比例 扩大/缩小到View的大小显示
(8)MATRIX / matrix 用矩阵来绘制,动态缩小放大图片来显示。
希望小伙伴们多多支持(如有错误,希望指出)