android图像处理(二)

方式一:

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中的值。

pre方法表示矩阵前乘,例如:变换矩阵为A,原始矩阵为B,pre方法的含义即是A*B
post方法表示矩阵后乘,例如:变换矩阵为A,原始矩阵为B,post方法的含义即是B*A

除平移变换(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详细使用方法参考:文章地址


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值