Android学习之位图BitMap
BitMap代表一张位图,扩展名可以是.bmp或者.dib。位图是Windows标准格式图形文件,它将图像定义为由点(像素)组成,每个点可以由多种色彩表示,包括2、4、8、16、24和32位色彩。例如,一幅1024×768分辨率的32位真彩图片,其所占存储字节数为:1024×768×32/8=3072KB
位图文件图像效果好,但是非压缩格式的,需要占用较大存储空间,不利于在网络上传送。jpg格式则恰好弥补了位图文件这个缺点。
在android系统当中,bitmap是图像处理最重要的类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。
下面主要介绍BitMap的用法:
1.从资源文件中获取
1 Bitmap rawBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.img1);
2.从SD卡中得到图片
复制代码
1 (方法1)
2 String SDCarePath=Environment.getExternalStorageDirectory().toString();
3 String filePath=SDCarePath+"/"+"haha.jpg";
4 Bitmap rawBitmap1 = BitmapFactory.decodeFile(filePath, null);
5 (方法2)
6 InputStream inputStream=getBitmapInputStreamFromSDCard("haha.jpg");
7 Bitmap rawBitmap2 = BitmapFactory.decodeStream(inputStream);
复制代码
3.设置图片的圆角,返回设置后的BitMap
复制代码
1 public Bitmap toRoundCorner(Bitmap bitmap, int pixels) {
2 Bitmap roundCornerBitmap = Bitmap.createBitmap(bitmap.getWidth(),
3 bitmap.getHeight(), Config.ARGB_8888);
4 Canvas canvas = new Canvas(roundCornerBitmap);
5 int color = 0xff424242;// int color = 0xff424242;
6 Paint paint = new Paint();
7 paint.setColor(color);
8 // 防止锯齿
9 paint.setAntiAlias(true);
10 Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
11 RectF rectF = new RectF(rect);
12 float roundPx = pixels;
13 // 相当于清屏
14 canvas.drawARGB(0, 0, 0, 0);
15 // 先画了一个带圆角的矩形
16 canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
17 paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
18 // 再把原来的bitmap画到现在的bitmap!!!注意这个理解
19 canvas.drawBitmap(bitmap, rect, rect, paint);
20 return roundCornerBitmap;
21 }
复制代码
4.将图片高宽和的大小kB压缩
复制代码
1 //得到图片原始的高宽
2 int rawHeight = rawBitmap.getHeight();
3 int rawWidth = rawBitmap.getWidth();
4 // 设定图片新的高宽
5 int newHeight = 500;
6 int newWidth = 500;
7 // 计算缩放因子
8 float heightScale = ((float) newHeight) / rawHeight;
9 float widthScale = ((float) newWidth) / rawWidth;
10 // 新建立矩阵
11 Matrix matrix = new Matrix();
12 matrix.postScale(heightScale, widthScale);
13 // 设置图片的旋转角度
14 // matrix.postRotate(-30);
15 // 设置图片的倾斜
16 // matrix.postSkew(0.1f, 0.1f);
17 // 将图片大小压缩
18 // 压缩后图片的宽和高以及kB大小均会变化
19 Bitmap newBitmap = Bitmap.createBitmap(rawBitmap, 0, 0, rawWidth,
20 rawWidth, matrix, true);
复制代码
5.将Bitmap转换为Drawable Drawable转Bitmap
1 Drawable newBitmapDrawable = new BitmapDrawable(Bitmap);
2 //如果要获取BitMapDrawable中所包装的BitMap对象,可以用getBitMap()方法;
3 Bitmap bitmap = newBitmapDrawable.getBitmap();
6.由于前面创建的Bitmap所占用的内存还没有回收,而导致引发OutOfMemory错误,所以用下面方法判断是否回收。
1 if(!bitmap.isRecycled())
2 {
3 bitmap.recycle()
4 }
BitMap代表一张位图,扩展名可以是.bmp或者.dib。位图是Windows标准格式图形文件,它将图像定义为由点(像素)组成,每个点可以由多种色彩表示,包括2、4、8、16、24和32位色彩。例如,一幅1024×768分辨率的32位真彩图片,其所占存储字节数为:1024×768×32/8=3072KB
位图文件图像效果好,但是非压缩格式的,需要占用较大存储空间,不利于在网络上传送。jpg格式则恰好弥补了位图文件这个缺点。
在android系统当中,bitmap是图像处理最重要的类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。
下面主要介绍BitMap的用法:
1.从资源文件中获取
1 Bitmap rawBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.img1);
2.从SD卡中得到图片
复制代码
1 (方法1)
2 String SDCarePath=Environment.getExternalStorageDirectory().toString();
3 String filePath=SDCarePath+"/"+"haha.jpg";
4 Bitmap rawBitmap1 = BitmapFactory.decodeFile(filePath, null);
5 (方法2)
6 InputStream inputStream=getBitmapInputStreamFromSDCard("haha.jpg");
7 Bitmap rawBitmap2 = BitmapFactory.decodeStream(inputStream);
复制代码
3.设置图片的圆角,返回设置后的BitMap
复制代码
1 public Bitmap toRoundCorner(Bitmap bitmap, int pixels) {
2 Bitmap roundCornerBitmap = Bitmap.createBitmap(bitmap.getWidth(),
3 bitmap.getHeight(), Config.ARGB_8888);
4 Canvas canvas = new Canvas(roundCornerBitmap);
5 int color = 0xff424242;// int color = 0xff424242;
6 Paint paint = new Paint();
7 paint.setColor(color);
8 // 防止锯齿
9 paint.setAntiAlias(true);
10 Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
11 RectF rectF = new RectF(rect);
12 float roundPx = pixels;
13 // 相当于清屏
14 canvas.drawARGB(0, 0, 0, 0);
15 // 先画了一个带圆角的矩形
16 canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
17 paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
18 // 再把原来的bitmap画到现在的bitmap!!!注意这个理解
19 canvas.drawBitmap(bitmap, rect, rect, paint);
20 return roundCornerBitmap;
21 }
复制代码
4.将图片高宽和的大小kB压缩
复制代码
1 //得到图片原始的高宽
2 int rawHeight = rawBitmap.getHeight();
3 int rawWidth = rawBitmap.getWidth();
4 // 设定图片新的高宽
5 int newHeight = 500;
6 int newWidth = 500;
7 // 计算缩放因子
8 float heightScale = ((float) newHeight) / rawHeight;
9 float widthScale = ((float) newWidth) / rawWidth;
10 // 新建立矩阵
11 Matrix matrix = new Matrix();
12 matrix.postScale(heightScale, widthScale);
13 // 设置图片的旋转角度
14 // matrix.postRotate(-30);
15 // 设置图片的倾斜
16 // matrix.postSkew(0.1f, 0.1f);
17 // 将图片大小压缩
18 // 压缩后图片的宽和高以及kB大小均会变化
19 Bitmap newBitmap = Bitmap.createBitmap(rawBitmap, 0, 0, rawWidth,
20 rawWidth, matrix, true);
复制代码
5.将Bitmap转换为Drawable Drawable转Bitmap
1 Drawable newBitmapDrawable = new BitmapDrawable(Bitmap);
2 //如果要获取BitMapDrawable中所包装的BitMap对象,可以用getBitMap()方法;
3 Bitmap bitmap = newBitmapDrawable.getBitmap();
6.由于前面创建的Bitmap所占用的内存还没有回收,而导致引发OutOfMemory错误,所以用下面方法判断是否回收。
1 if(!bitmap.isRecycled())
2 {
3 bitmap.recycle()
4 }