Android Matrix (二)具体图形变换参数的获取

Android Matrix (二)具体图形变换参数的获取

Matrix 类在 Android 中用于表示 3x3 的变换矩阵。这个矩阵可以应用于画布(Canvas),视图(View)或者位图(Bitmap),以实现各种图形变换,如旋转、缩放、平移和倾斜。
在 Android 中,Matrix 类并不直接提供方法来查询它所执行的特定变换(如平移、缩放、旋转等)。然而,您可以通过检查矩阵的值来推断出应用于图形的变换。Matrix 类中的 getValues 方法可以用来获取矩阵的九个值,这些值反映了应用于图像的各种变换。
在这里插入图片描述

以下是如何获取和理解这些矩阵值的方法:

float[] values = new float[9];
matrix.getValues(values);float scaleX = values[Matrix.MSCALE_X];
float scaleY = values[Matrix.MSCALE_Y];
float skewX = values[Matrix.MSKEW_X];
float skewY = values[Matrix.MSKEW_Y];
float transX = values[Matrix.MTRANS_X];
float transY = values[Matrix.MTRANS_Y];
float persp0 = values[Matrix.MPERSP_0];
float persp1 = values[Matrix.MPERSP_1];
float persp2 = values[Matrix.MPERSP_2];

在 Android 的 Matrix 类中,矩阵是一个 3x3 的数组,用于表示二维图形的变换。矩阵中的每个值都有特定的作用,以下是它们的详细分析:

缩放(Scale)

  • ScaleX (Matrix.MSCALE_X)ScaleY (Matrix.MSCALE_Y):这两个值代表图像在 X 轴(水平方向)和 Y 轴(垂直方向)上的缩放比例。
    • 如果 ScaleXScaleY 大于 1,则图像在相应轴上被放大。
    • 如果这些值小于 1,则图像在相应轴上被缩小。
    • 如果这些值等于 1,则图像在该轴上保持原始大小。
    • 实际应用:缩放变换可以用于适配不同屏幕尺寸的视图,或在动画中创建放大和缩小的效果。

倾斜/斜切(Skew)

  • SkewX (Matrix.MSKEW_X)SkewY (Matrix.MSKEW_Y):这两个值代表图像在 X 轴和 Y 轴上的倾斜程度,也称为斜切。
    • SkewXSkewY 通常用于创建图像的倾斜效果。
    • 它们会使图像在一个轴向上倾斜,而在另一个轴向上保持位置。
    • 实际应用:倾斜/斜切变换常用于创建动态的视觉效果,如模仿风吹动的旗帜或斜视角查看图像。

平移(Translate)

  • TransX (Matrix.MTRANS_X)TransY (Matrix.MTRANS_Y):这两个值代表图像在 X 轴和 Y 轴上的平移距离。
    • TransXTransY 用于移动图像的位置。
    • 正值表示沿着正方向的移动,而负值表示沿着负方向的移动。
    • 实际应用:平移变换广泛用于动画中的对象移动,如滑动菜单或对话框的出现和消失。

透视(Perspective)

  • Persp0 (Matrix.MPERSP_0)Persp1 (Matrix.MPERSP_1)Persp2 (Matrix.MPERSP_2):这些值用于实现图像的透视变换。
    • 透视变换影响图像的深度感和三维效果。
    • 它们可以用于创建类似于在三维空间中查看二维图像的效果。
    • 实际应用:透视变换可以用于创建深度感,如在地图应用中模拟3D建筑的视角。

每个值的组合可以创建复杂的变换效果,如旋转(通过结合缩放和倾斜)、倾斜然后平移等。理解这些参数及其相互作用对于高级图形操作非常重要。
在这里插入图片描述

分析变换

  • 缩放:通过比较 scaleXscaleY 的值来确定图像是否被缩放,并且缩放了多少。
  • 平移transXtransY 的值如果不为零,则表示图像被平移。
  • 旋转:旋转可以通过 skewXskewY 的值来推断。纯旋转不会改变 scaleXscaleY,但会改变 skewXskewY
  • 倾斜/斜切:如果 skewXskewY 的值不为零,且 scaleXscaleY 也被改变,则图像可能同时经历了旋转和倾斜。

注意事项

  • 获取到的这些值是相对于图像最初状态的变换。如果矩阵经过了多次变换,这些值是累积效果的结果。
  • 解析这些值需要对矩阵变换有一定的理解。
  • 如果您只对特定类型的变换(如平移或缩放)感兴趣,您可能只需检查相关的矩阵值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/333452.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试|Linux基础教程:cp命令详解,复制文件或目录

简介 在Linux系统中,cp命令是一个非常常用且强大的命令,用于复制文件和目录。cp命令允许我们在不同目录之间复制文件或目录,并可以根据需求对文件复制的行为进行调整。在本文中,我们将详细解释cp命令的用法以及一些常见的选项。 …

C++常用库函数大小写转换

在我们在编写代码时大小写转换是基础知识,这篇博客将通过介绍C常用库函数来回顾和学习一种不一样的大小写转换 目录 一、islower/isupper函数二、tolower/toupper函数三、ASCLL码 一、islower/isupper函数 islower和isupper函数是C标准库中的字符分类函数&#xff…

python Android 安卓开发

kivy:https://github.com/kivy python-for-android :https://python-for-android.readthedocs.io/en/latest/ BeeWare:https://docs.beeware.org/en/latest/ Flet:https://github.com/flet-dev/flet 把 PySide6 移植到安卓上去&a…

7-4 计算长方体和四棱锥的表面积和体积 --笔记篇

题目 计算如下立体图形的表面积和体积。 从图中观察,可抽取长方体和四棱锥两种立体图形的共同属性到父类Rect中:长度:l 宽度:h 高度:z。 编程要求: (1)在父类Rect中&#xff0c…

Unity中URP下使用屏幕坐标采样深度图

文章目录 前言一、Unity使用了ComputeScreenPos函数得到屏幕坐标1、 我们来看一下这个函数干了什么2、我们看一下该函数实现该结果的意义 二、在Shader中使用(法一)1、在Varying结构体中2、在顶点着色器中3、在片元着色器中 三、在Shader中使用&#xff…

linux 使用log4cpp记录项目日志

为什么要用log4cpp记录项目日志 在通常情况下,Linux/UNIX 每个程序在开始运行的时刻,都会打开 3 个已经打开的 stream. 分别用来输入,输出,打印错误信息。通常他们会被连接到用户终端。这 3 个句柄的类型为指向 FILE 的指针。可以…

物理环境测评

1.1 物理位置选择 1.1.1 防震防风防雨 安全要求 机房场地选择在具有防震防风防雨等能力的建筑内 测评方法 核查是否有建筑物抗震设防审批文档 核查是否有雨水渗透的痕迹 核查是否有可灵活开启的窗户,若有窗户,是否做了封闭,上锁等防护措…

mongodb基本命令操作

1.创建数据库 语法 use 数据库名字例如:创建hero数据库 use hero查询当前数据库 db如果想查询所有的数据库 show dbs发现并没有刚刚创建的数据库,如果要显示创建的数据库,需要向表中插入一条记录 db.hero.insert({name: "zs",age: 20,country: "china&quo…

【grpc】利用protobuf实现java或kotlin调用python脚本,含实现过程和全部代码

前言 在一些特殊场景中,我们可能需要使用java或者其他任意语言调用python脚本或sdk等。本文的需求衍生也不例外于此,python端有sdk,但只能在python中调用,于是就有了本文章。 常见的调用方式如jython、python提供http rest接口、…

余震强度预测能力升级,Nature 刊文认证基于神经网络的模型性能优于传统模型

作者:李宝珠 编辑:李玮栋、xixi,三羊 地震的发生涉及诸多变量,「预测」存在挑战,但余震发生次数及强度的预测已取得重大进展。 2023 年 12 月 18 日 23 时 59 分,甘肃省临夏州积石山县发生 6.2 级地震&…

你好,2024!再见,2023!

大家好,我是南城余! 今天是2023年最后一天,看到各位大佬都在分享今年的总结,我也来做个年度总结,是第一次做年度总结,希望以后可以每年都做一个好好的回顾。 说来可笑,标题,2023怎么…

tcp/ip协议2实现的插图,数据结构6 (24 - 章)

(142) 142 二四1 TCP传输控制协议 tcpstat统计量与tcp 函数调用链 (143) 143 二四2 TCP传输控制协议 宏定义与常量值–上 (144) 144 二四3 TCP传输控制协议 宏定义与常量值–下 (145) 145 二四4 TCP传输控制协议 结构tcphdr,tcpiphdr (146) 146 二四5 TCP传输控制协议 结构 tcp…