图像的操作
-
拿到原图
basebBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.img_small_1);
-
拿到一张与原图大小的纸
copyBitmap = Bitmap.createBitmap(basebBitmap.getWidth(), basebBitmap.getHeight(), basebBitmap.getConfig());
-
将这张纸固定在画板上
canvas = new Canvas(copyBitmap);
-
找一根笔
paint = new Paint();
-
按照一定的规则处理图片
Matrix matrix = new Matrix();// 1:1
缩放
matrix.setScale(0.5f, 0.5f);
位移
matrix.setTranslate(100, 100);
旋转
matrix.setRotate(-45);// 45代表顺时针旋转45度,默认左上角为原点 matrix.setRotate(45, basebBitmap.getWidth() / 2, basebBitmap.getHeight() / 2);
镜面效果
matrix.setScale(-1f, 1f); matrix.setTranslate(basebBitmap.getWidth(), 0); matrix.postTranslate(basebBitmap.getWidth(), 0);
倒影
matrix.setScale(1f, -1f); matrix.postTranslate(0, basebBitmap.getHeight());
如果要对图片进行多次操作,就必须postXXXX
-
将处理过的图片画出来
canvas.drawBitmap(basebBitmap, matrix, paint);
iv2.setImageBitmap(copyBitmap);
图片的风格
ColorMatrix颜色矩阵
1,0,0,0,0 r
0,1,0,0,0 g
0,0,1,0,0 b
0,0,0,1,0 a
矩阵上的数字1表示对应的rgba的取值,该取值范围是(0-2)
在给paint设置ColorFilter属性
paint.setColorFilter(new ColorMatrixColorFilter(colors));
其中colors为float的数组对应colorMatrix的颜色矩阵
Canvas方法相关处理##
private void init() {
bitmap = Bitmap.createBitmap(500, 500, Config.ARGB_8888);
canvas = new Canvas(bitmap);
canvas.drawColor(Color.BLACK);// 设置画板的颜色
paint = new Paint();
paint.setColor(Color.RED);// 设置画笔颜色
paint.setStrokeWidth(5);// 设置画笔粗细
paint.setAntiAlias(true);// 抗锯齿(效果并不怎么好)
paint.setStyle(Style.STROKE);//画笔风格空心
}
画线
给定起始点的坐标即可。
长方形
给定的是左上角和右下角坐标
画扇形
先指定一个矩形画出内切圆在此基础上画出扇形
public void drawArc(View view) {
init();
RectF rectF = new RectF(20, 20, 400, 400);
canvas.drawArc(rectF, 0, 270, true, paint);
iv.setImageBitmap(bitmap);
}
画多边形
新建path对象,drawPath();
起始点用方法moveTo()设定,其他坐标用linkTO()设定,同时也可以在基础上添加扇形。用path.addArc(rectF, 0, 180)或是path.arcTo(rectF, 0, 180)注意这两个方法放的位置不同
扫描二维码即可关注玩转_android公众号
玩转_android的博客2016/5/10 19:46:09
网友评论