(2012-04-10 16:51:57) 转载
标签:

转载

分类:技术
原文地址:Android缩放drawable 作者:雨点点

一、相关概念

1.Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象

2.Canvas画布,绘制的目的区域,用于绘图

3.Bitmap位图,用于图的处理

4.Matrix矩阵,此例中用于操作图片

二、步骤

1.drawable画到位图对象上

2.对位图对象做缩放(或旋转等)操作

3.把位图再转换成drawable

三、示例
static Bitmap drawableToBitmap(Drawable drawable)// drawable转换成bitmap
{
int width = drawable.getIntrinsicWidth();
//
drawable的长宽
int height = drawable.getIntrinsicHeight();
Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888:Bitmap.Config.RGB_565;
//drawable的颜色格式
Bitmap bitmap = Bitmap.createBitmap(width, height, config);
//建立对应bitmap
Canvas canvas = new Canvas(bitmap);
//
建立对应bitmap的画布
drawable.setBounds(0, 0, width, height);
drawable.draw(canvas);
//drawable内容画到画布中
return bitmap;
}

static Drawable zoomDrawable(Drawable drawable, int w, int h)
{
int width = drawable.getIntrinsicWidth();
int height= drawable.getIntrinsicHeight();
Bitmap oldbmp = drawableToBitmap(drawable);
// drawable转换成bitmap
Matrix matrix = new Matrix();
//
创建操作图片用的Matrix对象
float scaleWidth = ((float)w / width);
//计算缩放比例
float scaleHeight = ((float)h / height);
matrix.postScale(scaleWidth, scaleHeight);
//设置缩放比例
Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height, matrix, true);
//建立新的bitmap,其内容是对原bitmap的缩放后的图
return new BitmapDrawable(newbmp);
//bitmap转换成drawable并返回
}
}

四、其它

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Bitmap.Config;
import android.graphics.PorterDuff.Mode;
import android.graphics.drawable.Drawable;

public class FunctionUtil {


public static Bitmap imageScale(Bitmap bitmap, int dst_w, int dst_h){

int src_w = bitmap.getWidth();
int src_h = bitmap.getHeight();
floatscale_w = ((float)dst_w)/src_w;
float scale_h = ((float)dst_h)/src_h;
Matrix matrix = new Matrix();
matrix.postScale(scale_w, scale_h);
Bitmap dstbmp = Bitmap.createBitmap(bitmap, 0, 0, src_w, src_h, matrix, true);

return dstbmp;
}

或者使用Bitmap.createScaledBitmap(bitmap, width, heigth, true);方法,

需要指定缩放后的图片大小尺寸。



public static Bitmap drawabletoBitmap(Drawable drawable){

intwidth = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicWidth();

Bitmap bitmap = Bitmap.createBitmap(width, height, drawable.getOpacity() != PixelFormat.OPAQUE ?
Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, width, height);

drawable.draw(canvas);

return bitmap;
}


public static Bitmap getRCB(Bitmap bitmap, float roundPX)//RCB means Rounded Corner Bitmap
{
Bitmap dstbmp = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(dstbmp);

final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPX, roundPX, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);

return dstbmp;
}
}


更多相关文章

  1. Android图片加载框架最全解析(一),Glide的基本用法
  2. android binder机制之三 Server Porxy
  3. Android(安卓)解屏幕锁与点亮屏幕(来电时效果)
  4. 分析linux/android C层的死机堆栈问题
  5. Android(安卓)MediaPlayer 播放本地与远程的mp3初步
  6. Android(安卓)之 下拉(Spinner) 组件示例
  7. Android加载相册和拍照
  8. Android(安卓)Training精要(三)不同分辨率图片缩放倍数
  9. Android中Activity,View,Window之间的关系

随机推荐

  1. Android(安卓)Wifi 信息保存与忘记
  2. Android(安卓)savedInstanceState的使用
  3. Android(安卓)opengl es 2.0怎么学习
  4. Android(安卓)5.0 Lollipop新的摄像头API
  5. php学习笔记(数据类型的转换、数据类型的
  6. 移植之乱谈
  7. layout_width和width,layout_height和hei
  8. android中viewpager的学习
  9. android小游戏:功夫蛇 开发经验总结(附apk
  10. wpa_supplicant适配层 -- 详解