- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android群英传笔记——第五章:Android Scroll分析(二)
-3.浮雕效果
……
B.r = C.r - B.r + 127;
B.g = C.g - B.g + 127;
B.b = C.b - B.b + 127;
六.Android图像处理之图像特效处理
我们也了解了老半天的色彩处理效果,接下来我们再来探索一下图像方面的处理技巧
1.Android变形矩阵——Matrix
对于图像的处理,Android系统提供了ColorMatrix颜色矩阵来帮助我们进行图像处理,而对于图像的图形变换,Android系统也可以通过矩阵来帮忙,每个像素点都表达了其xy的信息,Android的变化就是一个3X3的矩阵
当使用变换矩阵去处理每一个像素点的时候,与颜色矩阵的算法公司其实是一样的
X1 = a x X +b x Y +c;
Y1 = d x X +e x Y +f;
1 = g x X +hx Y + i;
通常情况下,会让g = h = 0,i = 1;这样使1 = g x X + h x Y + i恒成立,因此只需要关注这几个参数就行
与色彩变换矩阵的初始化矩阵一样,图形变换矩阵也需要一个初始矩阵,很明显就是对角线元素,其他元素为0的矩阵
图像的变形处理包含以下四类基本变换
Translate——平移变换
Rotate——旋转变换
Scale——缩放变换
Skew——错切变换
-1.平移变换
我们先看一张图
平移变换的坐标就如图,即将每个点的像素点进行平移变换,当p(x0,y0)平移到p(x,y)时,坐标发生了如下的变化
X = X0 + ^X;
Y = Y0 + ^Y;
通过计算我们可以发现如下等式
X = X0 + ^X;
Y = Y0 + ^Y;
这就是我们前面所说的实现平移的平移公式
-2.旋转变换
选择变换实际上就是一个点围绕一个中心旋转到一个新的点上
前面是以坐标原点为旋转中心旋转变换,如果以任一点0为旋转中心进行旋转变换,通常需要以下三个步骤
将坐标原点平移到0点
使用前面讲的以坐标原点为中心的旋转方法进行旋转变换
将坐标原点还原
通过上述三个步骤,就可以以任一点进行旋转了
-3.缩放变换
一个像素点是不存在缩放的概念的,但是由于图像是由很多人像素点组成,如果将每个像素点的坐标都进行相同比例的缩放,最终就会形成让整个图像缩放的效果,缩放效果的计算公式
x = K1 X x0;
y = K2 X y0;
如果写成矩阵的话
通过计算,就可以还原上述等式了
-4.错切变换
错切变换(skew)在数学上又称为Shear mapping(可译为“剪切变换”),或者Transvection(缩并),它是一种比较特殊的线性变换,错切变换的效果就是让所有的X坐标标尺不变,一般分水平和垂直
处置错切就不画了
在了解了矩阵变换规律之后,通过类似多彩矩阵中模拟矩阵的例子来模拟变形矩阵,整个代码与模块颜色矩阵所使用的代码基本一致,在图形变换,同样是通过了一个一位数组将一个一位数组转换为变换矩阵
private float [] mImageMatrix = new float[9];
Matrix matrix = new Matrix();
matrix.setValues(mImageMatrix);
canvas.drawBitmap(mBitmmap,matrix,null);
后面一小部分不写
2.像素块分析
与我们当初了解色彩的处理效果时类似,使用了颜色矩阵和像素点处理两种方式来进行图像处理,这里在进行图像的处理方式也有两种,即前面讲的使用矩阵来进行图像变换和马上要使用到的drawBitmapMesh()方法来处理,操作像素块的原理,该方法如下
canvas.drawBitmapMesh(Bitmap bitmap,int meshWidth,int meshHeight,float [] verts,int vertOffset,int [] color,int colorOffset,Paint paint);
这个方法的参数非常的多
bitmap:将要扭曲的图像
meshWidth:需要的横向网格数目
meshHeight:需要的纵向网格数目
verts:网格交叉点的坐标数组
vertOffset:verts数组中开始跳过的(X,Y)坐标对的数目
前面说了,要想使用drawBitmapMesh()的方法先要将突破分成若干份,所以在图像各画N-1条线,将图片分成N块,这里我来演示一下
mBitmap = BitmapFactory.decodeResource(getResources(),R.drawabl
文档评论(0)