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.mzph.cn/news/608672.shtml

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

相关文章

服务器日常维护要素,应该如何做好维护

维护服务器的目的是为了让服务器的性能保持最佳状态,发现问题及时解决,没有问题也可以对相关的应用和配置进行调优。但也有很多用户疑问,服务器具体会有哪些方面需要维护的,今天就一起来看看吧。 服务器日常维护,主要包…

Python基础入门第九课笔记(文件和文件夹)

1,新建文本并且写内容 a open(1.text,w) a.write("""aaa bbb ccc""") a.close() 2,seek( )移动文件指针 文件对象.seek(偏移量,起始位置) # 起始位置:0开头,1当前位置,2文件结尾…

7+坏死性凋亡+分型+预后模型+实验,筛坏死性凋亡相关基因并建模

今天给同学们分享一篇生信文章“MLKL and other necroptosis-related genes promote the tumor immune cell infiltration, guiding for the administration of immunotherapy in bladder urothelial carcinoma”,这篇文章发表在Apoptosis期刊上,影响因子…

【新华三】IPsec VPN 实验配置(地址固定)

【新华三】IPsec VPN 实验配置(地址固定) 注意实验需求配置思路配置命令拓扑R1基础配置配置第一阶段 IKE SA配置第二阶段 IPsec SA ISP_R2基础配置 R3基础配置配置第一阶段 IKE SA配置第二阶段 IPsec SA PCPC1PC2 检查建立成功查看命令清除IKE / IPsec S…

分享几个网盘资源搜索地址,总能找到你想要的

目录 [TOC](目录)一、前言二、地址分享三、结尾 一、前言 分享几个网盘搜索网站,总能找到你想要的。 二、地址分享 盘搜搜: https://pansoso.com/ 搜网盘: https://www.swangpan.com/ fastsoso: https://www.fastsoso.cc 猫狸盘搜: https://www.alipansou.com…

虚拟机安装intel架构的银河麒麟V10(SP1)

一 背景 银河麒麟是国产操作系统之一,是基于Linux内核的桌面操作系统,有自己的应用中心,具有一定的生态系统。今从官网下载了V10(SP1)镜像文件,在Windowns的VMware虚拟机上安装试用。 二 安装 1、 首先安装…

【漏洞复现】锐捷RG-UAC统一上网行为管理系统信息泄露漏洞

Nx01 产品简介 锐捷网络成立于2000年1月,原名实达网络,2003年更名,自成立以来,一直扎根行业,深入场景进行解决方案设计和创新,并利用云计算、SDN、移动互联、大数据、物联网、AI等新技术为各行业用户提供场…

桶装水在线订水送水系统平台搭建

在线订水系统,为您带来更快捷、更优质的服务。不仅是用户福音,更是商家营销利器。一体化管理,轻松搞定用户、水站、商品、订单及售后。多种营销活动,激发用户复购意愿。 功能亮点如下: 1. 注册登录:手机号…

Mysql 恢复误删库表数据

一、前提 1、如果你的数据库有备份文件,自己还原即可。 2、如果没有备份文件,那首先检查下你的 binlog 是否开启。如果未开启,那你就不用往下看了。如果开启了,可以往下看看。 1.1 查看位置 可以通过以下的命令查看是否开启了 bi…

梯度下降和反向传播:能改

一、背景 1.问题 通过顶点坐标公式,求解出抛物线最低点的w坐标,得到了让误差代价最小的w。同样的,也通过算数说明了这种一步到位求解的方式固然是好,但是在输入特征过多、样本数量过大的时候,却非常消耗计算资源。 …

echarts - xAxis.type设置time时该如何使用formatter的分级模板

echarts 文档中描述了x轴的多种类型 一、type: ‘value’ ‘value’ 数值轴,适用于连续数据。 此时x轴数据是从零开始,有数据大小的区分。 【注意】 因为xAxis.data是为category服务的,所以xAxis.data里面设置的数据无效。 二、type: ‘ca…

前端适配750px设计稿

全局引入 (function(doc, win) {const docEl doc.documentElement,resizeEvt orientationchange in window ? orientationchange : resizeconst setFont function() {let clientWidth docEl.clientWidth;if (!clientWidth) return;if (clientWidth > 750) {docEl.styl…

【自学笔记】01Java基础-07面向对象基础-03常量、枚举类、抽象类、多态详解

记录java基础学习中有关常量、枚举类、抽象类和多态的内容。 1 常量 什么是常量? 常量是使用了public static final修饰的成员变量,必须有初始化值,而且执行的过程中其值不能被改变。 常量名的命名规范:英文单词全部大写&#x…

【JAVA】throw 和 throws 的区别?

🍎个人博客:个人主页 🏆个人专栏: JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 throw: throws: 区别: 作用: 使用位置: 个数: 应…

软件测试|Python对JSON的解析和创建详解

简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,已经成为当今互联网应用中广泛使用的数据格式之一。Python提供了内置的模块来解析和创建JSON数据,使得在Python中处理JSON变得非常简单。本文将详细介绍Python…

【题解】—— LeetCode一周小结

1.经营摩天轮的最大利润 题目链接: 1599. 经营摩天轮的最大利润 你正在经营一座摩天轮,该摩天轮共有 4 个座舱 ,每个座舱 最多可以容纳 4 位游客 。你可以 逆时针 轮转座舱,但每次轮转都需要支付一定的运行成本 runningCost 。摩…

Docker简介、基本概念和安装

Docker简介、基本概念和安装 1.docker简介 1.1 什么是docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes (opens new window)在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2…

Objective-C中使用STL标准库Queue队列

1.修改.m文件为mm 2.导入queue头 #include<queue> 3.使用&#xff1a; #import <Foundation/Foundation.h> #include <cmath> #include <queue> using namespace std;int main(int argc, const char * argv[]) {autoreleasepool {NSLog("C标准…

云计算任务调度仿真01

云计算任务调度的研究大多数以来仿真研究&#xff0c;现梳理一些做过的代码研究 结果无数次的排错&#xff0c;终于finish with code 0 了 这个代码以来的是比较老的TensorFlow版本&#xff0c;我们都知道TensorFlow1.x和TensorFlow2.x之间有很大差别&#xff0c;但其实&#…