Android艺术之旅

Bitmap学习日记以及android:ScaleType的属性

2016-12-05  本文已影响134人  就这样e

警言:慎终如始!

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

                                 希望小伙伴们多多支持(如有错误,希望指出)

上一篇下一篇

猜你喜欢

热点阅读