一、基本概念
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 缩放
public static Bitmap
zoomBitmap(Bitmap bitmap,
int width,
int height) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Matrix matrix =
new Matrix();
float scaleWidth = ((
float) width / w);
float scaleHeight = ((
float) height / h);
matrix.postScale(scaleWidth, scaleHeight);
Bitmap newbmp = Bitmap.createBitmap(bitmap,
0,
0, w, h, matrix,
true);
return newbmp;
}
5、将 Drawable 转化为 Bitmap
public static Bitmap
drawableToBitmap(Drawable drawable) {
int w = drawable.getIntrinsicWidth();
int h = drawable.getIntrinsicHeight();
Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565;
Bitmap bitmap = Bitmap.createBitmap(w, h, config);
Canvas canvas =
new Canvas(bitmap);
drawable.setBounds(
0,
0, w, h);
drawable.draw(canvas);
return bitmap;
}
6、获得圆角图片
public static Bitmap
getRoundedCornerBitmap(Bitmap bitmap,
float roundPx) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);
Canvas canvas =
new Canvas(output);
final int color =
0xff424242;
final Paint paint =
new Paint();
final Rect rect =
new Rect(
0,
0, w, h);
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 output;
}
7、获得带倒影的图片
public static Bitmap
createReflectionImageWithOrigin(Bitmap bitmap) {
final int reflectionGap =
4;
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Matrix matrix =
new Matrix();
matrix.preScale(
1, -
1);
Bitmap reflectionImage = Bitmap.createBitmap(bitmap,
0, h /
2, w,
h /
2, matrix,
false);
Bitmap bitmapWithReflection = Bitmap.createBitmap(w, (h + h /
2),
Config.ARGB_8888);
Canvas canvas =
new Canvas(bitmapWithReflection);
canvas.drawBitmap(bitmap,
0,
0,
null);
Paint deafalutPaint =
new Paint();
canvas.drawRect(
0, h, w, h + reflectionGap, deafalutPaint);
canvas.drawBitmap(reflectionImage,
0, h + reflectionGap,
null);
Paint paint =
new Paint();
LinearGradient shader =
new LinearGradient(
0, bitmap.getHeight(),
0,
bitmapWithReflection.getHeight() + reflectionGap,
0x70ffffff,
0x00ffffff, TileMode.CLAMP);
paint.setShader(shader);
paint.setXfermode(
new PorterDuffXfermode(Mode.DST_IN));
canvas.drawRect(
0, h, w, bitmapWithReflection.getHeight()
+ reflectionGap, paint);
return bitmapWithReflection;
}
三、Drawable
1、Bitmap 转换成 Drawable
Bitmap bm=xxx;
BitmapDrawable bd=
new BitmapDrawable(getResource(), bm);
因为 BtimapDrawable 是 Drawable 的子类,最终直接使用bd对象即可。
2、Drawable 缩放
public static Drawable
zoomDrawable(Drawable drawable,
int w,
int h) {
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap oldbmp = drawableToBitmap(drawable);
Matrix matrix =
new Matrix();
float sx = ((
float) w / width);
float sy = ((
float) h / height);
matrix.postScale(sx, sy);
Bitmap newbmp = Bitmap.createBitmap(oldbmp,
0,
0, width, height,
matrix,
true);
return new BitmapDrawable(newbmp);
}
转载请注明原文地址: https://ju.6miu.com/read-660017.html