Android中Bitmap和Drawable,等相关内容
一、相关概念
1、Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象
2、Canvas画布,绘图的目的区域,用于绘图
3、Bitmap位图,用于图的处理
4、Matrix矩阵
二、Bitmap
1、从资源中获取Bitmap
- Resources res = getResources();
- Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon);
2、Bitmap → byte[]
- public byte[] Bitmap2Bytes(Bitmap bm) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
- return baos.toByteArray();
- }
3、byte[] → Bitmap
- public Bitmap Bytes2Bimap(byte[] b) {
- if (b.length != 0) {
- return BitmapFactory.decodeByteArray(b, 0, b.length);
- } else {
- return null;
- }
- }
4、Bitmap缩放
5、将Drawable转化为Bitmap
6、获得圆角图片
7、获得带倒影的图片
三、Drawable
1、Bitmap转换成Drawable
1 Bitmap bm=xxx; //xxx根据你的情况获取
2 BitmapDrawable bd= new BitmapDrawable(getResource(), bm);
3 因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。
2、Drawable缩放
1 public static Drawable zoomDrawable(Drawable drawable, int w, int h) {
2 int width = drawable.getIntrinsicWidth();
3 int height = drawable.getIntrinsicHeight();
4 // drawable转换成bitmap
5 Bitmap oldbmp = drawableToBitmap(drawable);
6 // 创建操作图片用的Matrix对象
7 Matrix matrix = new Matrix();
8 // 计算缩放比例
9 float sx = ((float) w / width);
10 float sy = ((float) h / height);
11 // 设置缩放比例
12 matrix.postScale(sx, sy);
13 // 建立新的bitmap,其内容是对原bitmap的缩放后的图
14 Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height,
15 matrix, true);
16 return new BitmapDrawable(newbmp);
17 }
1 // 获取bitmap占用的字节数 2 protected int sizeOf(Bitmap data) { 3 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1) { 4 return data.getRowBytes() * data.getHeight(); 5 } else { 6 return data.getByteCount(); 7 } 8 } 9 10 // 3.以RGB_565方式读入图片 11 public Bitmap readBitMap(Context context, int resId) { 12 BitmapFactory.Options opt = new BitmapFactory.Options(); 13 opt.inPreferredConfig = Bitmap.Config.RGB_565; 14 opt.inPurgeable = true; 15 opt.inInputShareable = true; 16 // 获取资源图片 17 InputStream is = context.getResources().openRawResource(resId); 18 return BitmapFactory.decodeStream(is, null, opt); 19 } 20 21 // 4.获取ImageView和其中drawable的大小 22 // 获取ImageView和其中drawable大小需在onWindowFocusChanged获取,在oncreate中返回的结果是0 23 public void onWindowFocusChanged(boolean hasFocus) { 24 ImageView imageView = (ImageView) findViewById(R.id.test1); 25 Log.v("Testresult", "width= " + imageView.getWidth() + " height= " 26 + imageView.getHeight()); 27 Log.v("Testresult", "drawawidth= " 28 + imageView.getDrawable().getBounds().width() 29 + " drawableheight= " 30 + imageView.getDrawable().getBounds().height()); 31 }