Android中的Matrix类与ColorMatrix类

简介: Android中的Matrix类与ColorMatrix类

1.Matrix.


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


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

Matrix matrix = new Matrix();
matrix.setValues(new float[] { 
1, 0, 0, 
0, 1, 0,
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的使用方式:

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

即构建一个ColorMatrixColorFilter对象,并将它应用于Paint对象,从而使得ColorMatrix对象可以用来改变Canvas对象上的绘制内容。

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


1,0,0,0,0


0,1,0,0,0


0,0,1,0,0


0,0,0,1,0


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


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


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

ColorMatrix cm = new ColorMatrix();
int contrast=2;
int brightness=-25;
cm.set(new float[] { 
  contrast, 0, 0, 0, brightness, 
  0, contrast, 0, 0, brightness, 
  0, 0, contrast, 0, brightness,
  0, 0, 0, 1, 0 });
//cm.setSaturation(.5f);//改变饱和度
paint.setColorFilter(new ColorMatrixColorFilter(cm));
目录
相关文章
|
4月前
|
前端开发 Java 测试技术
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
132 0
|
5月前
|
JSON 调度 数据库
Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点。文章详细解析了Kotlin中的协程、扩展函数、高阶函数、密封类及`inline`和`reified`关键字在Android开发中的应用,帮助读者更好地理解和使用这些特性。
98 1
|
5月前
|
前端开发 Java 测试技术
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
61 2
|
7月前
|
Java 测试技术 Android开发
Android项目架构设计问题之使用反射调用类的私有方法如何解决
Android项目架构设计问题之使用反射调用类的私有方法如何解决
97 0
|
9月前
|
安全 Android开发 Kotlin
Android面试题之Kotlin的几种常见的类
这篇文章探讨了Kotlin编程语言中的初始化顺序、延迟初始化、惰性初始化、`lateinit`与`by lazy`的区别、初始化注意事项、继承、嵌套类、数据类、单例类和枚举类的使用,以及密封类的概念。文中通过示例代码详细解释了各种特性,并提醒读者关注初始化顺序和线程安全问题。同时,鼓励读者关注作者的公众号“AntDream”获取更多相关文章。
64 1
|
10月前
|
XML Java Android开发
Android 分享机顶盒项目的封装类《GridView》(三)(转)
Android 分享机顶盒项目的封装类《GridView》(三)(转)
67 2
|
10月前
|
Android开发
Android 分享机顶盒项目的封装类《GridView》(二)(转)
Android 分享机顶盒项目的封装类《GridView》(二)(转)
64 2
|
10月前
|
Java 开发工具 Android开发
如何访问 android系统hide的类或接口
如何访问 android系统hide的类或接口
369 1
|
10月前
|
缓存 Android开发
Android——application全局类的使用
Android——application全局类的使用
128 0
|
10月前
|
XML Java Android开发
Android控件之基础控件——进度条类的view——TextView、Checkbox复选控件、RadioButton单选控件、ToggleButton开关、SeekBar拖动条、menu、弹窗
Android控件之基础控件——进度条类的view——TextView、Checkbox复选控件、RadioButton单选控件、ToggleButton开关、SeekBar拖动条、menu、弹窗
888 1

热门文章

最新文章

  • 1
    Android历史版本与APK文件结构
  • 2
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
  • 6
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 7
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 8
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
  • 9
    Android实战经验之Kotlin中快速实现MVI架构
  • 10
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
  • 1
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
    66
  • 2
    android FragmentManager 删除所有Fragment 重建
    26
  • 3
    Android实战经验之Kotlin中快速实现MVI架构
    42
  • 4
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
    42
  • 5
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    46
  • 6
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    161
  • 7
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    55
  • 8
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    73
  • 9
    Android历史版本与APK文件结构
    183
  • 10
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    54