方式一:
1、使用矩阵对图像进行变换处理:
android使用了3*3矩阵对图像进行变换,注意看图片中的英文,了解各个位置对图像处理效果;
具体参考文章:文章地址
private float[] matrixValue=new float[9];//保存矩阵的数值
private Matrix matrix=new Matrix();
、、、、、、
matrix.setValues(matrixValue);//设置矩阵的数值
canvas.drawBitmap(bitmap,matrix,null);//根据矩阵效果画图
2、可以使用矩阵的API直接对图像处理;
matrix.setTranslate();//设置平移效果
matrix.setRotate();//设置旋转效果
matrix.setScale();//设置缩放效果
matrix.setSkew();//设置错切效果
针对每种变换,Android提供了pre、set和post三种操作方式。其中
set用于设置Matrix中的值。
除平移变换(Translate)外,旋转变换(Rotate)、缩放变换(Scale)和错切变换(Skew)都可以围绕一个中心点来进行,如果不指定,在默认情况下是围绕(0, 0)来进行相应的变换的。
方式二:使用Xformode对图像进行处理
注意:android中,默认先画出的图形为Dst,后画出的为Src;Xformode不太支持硬件加速,使用时应把硬件加速禁止:setLayerType(LAYER_TYPE_SOFTWARE,null);
// Dst
canvas.drawRoundRect(0, 0, bitmap.getWidth(), bitmap.getHeight(),
50, 50, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));//设置paint使用Xformode
// Src
canvas.drawBitmap(bitmap, 0, 0, paint);
paint.setXfermode(null);
Xformode详细使用方法参考: 文章地址
方法三:使用Shader对图像进行处理
Shader有几个直接子类:
BitmapShader : 主要用来渲染图像
LinearGradient :用来进行线性渲染
RadialGradient : 用来进行环形渲染
SweepGradient : 扫描渐变---围绕一个中心点扫描渐变就像电影里那种雷达扫描,用来梯度渲染。
ComposeShader : 组合渲染,可以和其他几个子类组合起来使用。
其中BitmapShader稍微特殊:
渲染器着色一个位图作为一个纹理。位图可以重复或设置模式。
public BitmapShader(Bitmap bitmap,Shader.TileMode tileX,Shader.TileMode tileY)
调用这个方法来产生一个画有一个位图的渲染器(Shader)。
bitmap 在渲染器内使用的位图
tileX 在位图上X方向花砖模式
tileY 在位图上Y方向花砖模式
TileMode:(一共有三种)
CLAMP :如果渲染器超出原始边界范围,会复制范围内边缘染色。
REPEAT :横向和纵向的重复渲染器图片,平铺。
MIRROR :横向和纵向的重复渲染器图片,这个和REPEAT重复方式不一样,他是以镜像方式平铺。
bitmap= BitmapFactory.decodeResource(getResources(),R.drawable.beauty3);
out=Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), Bitmap.Config.ARGB_8888);
bitmapShader=new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);//获取图章内容
paint=new Paint();
paint.setAntiAlias(true);
paint.setShader(bitmapShader);//设置画笔
Canvas canvas =new Canvas(out);
canvas.drawCircle(250,250,150,paint);//使用设置图章的画笔画圆
Shader详细使用方法参考:
文章地址
方式四:使用drawBitmapMesh对图像进行处理;
drawBitmapMesh处理效果相当于ps中的扭曲,可以对图形进行扭曲;
Canvas的drawBitmapMesh定义如下:
public void drawBitmapMesh(Bitmap bitmap, int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint)
关键参数主要下面四个:
-bitmap: 就是将要扭曲的图像
-meshWidth: 需要的横向网格数目
-meshHeight: 需要的纵向网格数目
-verts: 网格顶点坐标数组。
-vertOffset: verts数组中开始跳过的(x,y)对的数目。
使用的时候需要先对图片进行划分,横向分多少网格,纵向分多少网格,按照之个标准获取每个交点的位置坐标,即是orign[];然后对orign[]中的每个位置进行改变,获得verts[];
drawBitmapMesh详细使用方法参考:文章地址