Android群英传--绘图机制和处理技巧(四)

Android中图像的图形特效处理

之前都是关于图像中色彩处理的特效,后边就是开始关于图像方面的处理。
和之前在处理色彩的时候使用一个4x5的矩阵一样,在进行图像的处理的时候也是使用矩阵进行处理,只是处理图像使用的是3x3的矩阵。对于每一个像素点而言,都有其各自的坐标矩阵来表达其坐标信息。例如对于像素点C而言其坐标矩阵为 XY1 ,系统的图形矩阵A为 adgbehcfi ,则像素点C最终显示在屏幕上的位置就是两个矩阵的乘积。即最终显示的点 R=AC=adgbehcfiXY1=X1Y11 其中 X1=aX+bY+c1 Y1 也是同样的计算方法。这就是一般图像显示在屏幕上的计算方法,一般情况下,系统的初始矩阵都是一个单位矩阵 100010001 ,这样图像的最开始位置就是其初始的坐标矩阵中的 XY

Android中图形特效分类:

常见的图形特效处理有四种:

  • 平移变换:图像在屏幕上沿 XY 移动一定距离
    X=X0+ΔX
    Y=Y0+ΔY

XY1=100010ΔXΔY1X0Y01

  • 旋转变换:图像按照一某一点旋转一定角度
    X0=rcosα,Y=rsinα

    β

X=rcos(α+β)=rcosαcosβrsinαsinβ

Y=rsin(α+β)=rsinαcosβ+rcosαsinβ

XY1=cosβsinβ0sinβcosβ0001X0Y01

  • 缩放变换:图像的X和Y按照一定的缩放比例进行放大或缩小
    X=K1X0,Y=K2Y0

XY1=K1K20010001X0Y01

  • 错切变换:所有点的X轴坐标不变,Y轴平移一定长度;或者是所有点的Y轴坐标不变,X轴坐标平移一定长度。
    X=X0+K1Y0
    Y=K2X0+Y0

XY1=1K20K110001X0Y01

Android系统同样为我们提供了矩阵运算的方法:

Matrix类中有提供了以上四种变化的设置方法和计算方法:

  • matrix.setRotate() 设置旋转矩阵

  • matrix.setTranslate() 设置平移矩阵

  • matrix.setScale()设置缩放矩阵

  • matrix.setSkew()设置错切矩阵

  • matrix.pre()矩阵前乘

  • matrix.post()矩阵后乘

Android中像素块的处理:

之前的一些操作针对的都是像素点而言,其实Android中也提供了对于像素块的处理方法。其原理和之前相同,只是这次要处理的由单独的一个像素点变成了一片区域内的像素点。

drawBitmapMesh(Bitmap bitmap,int meshWidth ,int meshHeight,float[] verts,int vertOffset,int[] color,int colorOffset,Paint paint):提供了修改像素块的方法

  • Bitmap bitmap:将要扭曲的Bitmap

  • int meshWidth:需要的横向网格数目

  • int meshHeight:需要的纵向网格数目

  • float[] verts:网格交叉点坐标数组

  • int vertOffset:数组中开始跳过的(x,y)坐标对的数目

  • int[] color:颜色数组

  • int colorOffset:颜色数组中开始跳过的(x,Y)坐标对数目

  • Paint paint:画笔

步骤:

  • 首先在Bitmap上横纵各画N-1条线,这样就把Bitmap分成了N块,横纵的N-1条线交织得到了N*N个交点,这N*N个交点以 x1,y1,x2,y2....... 的形式存在verts数组中

  • 然后要改变像素块,只需要改变verts数组中交叉点的位置即可,比如说当两个交叉点离得很近时就是一个扭曲的效果。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值