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 用矩阵来绘制,动态缩小放大图片来显示。

 

posted @ 2015-12-21 21:29  就这样e  阅读(251)  评论(0编辑  收藏  举报