Android中的Matrix类与ColorMatrix类

举报
ShaderJoy 发表于 2021/12/30 01:15:23 2021/12/30
【摘要】 1.Matrix. Android API中有一个Matirx类,当在现有位图对象上进行绘制或从另一个位图对象创建某个位图对象时,可以使用该类。这个类可以让我们对位图进行旋转、裁剪、缩放、平移等操作。 Matrix类是以9个float型数字的一维数组表示的。每个数字都对应于图像上每个点的3个坐标(x,y或z)之一。 Matrix...

1.Matrix.

Android API中有一个Matirx类,当在现有位图对象上进行绘制或从另一个位图对象创建某个位图对象时,可以使用该类。这个类可以让我们对位图进行旋转、裁剪、缩放、平移等操作。

Matrix类是以9个float型数字的一维数组表示的。每个数字都对应于图像上每个点的3个坐标(x,y或z)之一。


  
  1. Matrix matrix = new Matrix();
  2. matrix.setValues(new float[] {
  3. 1, 0, 0,
  4. 0, 1, 0,
  5. 0, 0, 1 });

顶行(1,0,0)指定源图像的x坐标将根据以下公式转换:x=1*x+0*y+0*z。即顶行总会影响到目标图像的x坐标,但可以操作源图像的x,y,z坐标。

同理,第二行和第三行将影响目标图像的y和z坐标。

Matrix类有以下成员方法:

setRotate(), setScale(), setTranslate(), 而这几种方法还有个字之前之后的版本(preScale(), postRotate(), postTranslate()...),这使得我们可以每次按顺序完成一个以上的转换。

2.ColorMatrix

类似于在Canvas对象上绘制时使用Matrix对象的方法,也可以使用一个ColorMatrix对象来改变用于在Canvas对象上绘制的Paint对象。

同样,ColorMatrix也是一个浮点数数组,可以对图像的像素进行操作。然后不同于操作x, y和z坐标,它操作的是颜色值——每个像素的RGBA值。

ColorMatrix的使用方式:


  
  1. ColorMatrix cm = new ColorMatrix();
  2. paint.setColorFilter(new ColorMatrixColorFilter(cm));

如上默认的ColorMatrix是不会改变图像的,因为它形如:

1,0,0,0,0

0,1,0,0,0

0,0,1,0,0

0,0,0,1,0

第一行包含了在单个像素的红色部分上发生的操作,第二行影响绿色部分,第三行影响蓝色部分,最后一行操作的是Alpha值。

而与每行相乘的数字中,第一个数字是与像素的红色值相关联的乘数,第二个是绿色相关联,第三个是蓝色相关联,第四个是与Alpha相关联,而最后一个数字不与任何值相乘。

例如,如果想改变图像的对比度和亮度可以这样操作:


  
  1. ColorMatrix cm = new ColorMatrix();
  2. int contrast=2;
  3. int brightness=-25;
  4. cm.set(new float[] {
  5. contrast, 0, 0, 0, brightness,
  6. 0, contrast, 0, 0, brightness,
  7. 0, 0, contrast, 0, brightness,
  8. 0, 0, 0, 1, 0 });
  9. //cm.setSaturation(.5f);//改变饱和度
  10. paint.setColorFilter(new ColorMatrixColorFilter(cm));



文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。

原文链接:panda1234lee.blog.csdn.net/article/details/8721361

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。