Android Matrix变换

Android中的矩阵(Matrix)变换 写在前面: 本篇博文将结合一个简单的Demo,讲解一下如何通过Matrix实现对Bitmap对象的一些简单处理,例如平移,旋转,放缩等。此外还会讲解一下矩阵乘法中的左乘右乘在Android中的代码实现。 一、Matrix类 这里说的Matrix类是位于"android.graphics.Matrix"包下的。它是Android提供的一个矩阵工具类,它本身不能对图像或View进行变换,但它可与... 阅读详情

Matrix变换公式:

Matrix变换公式

left [ matrix {scalex # skewx # transx ## skewy # scaley # transy ## persp0 # persp1 #persp2} right ] * left [ matrix{x ## y ## 1} right ] = left [ matrix{x^’ ## y^’ ## 1} right ]

Matrix无参数初始化或reset后是单位矩阵:
这里写图片描述

left [ matrix{1 # 0 # 0 ## 0 # 1 # 0 ## 0 # 0 # 1} right ]

五种掩码类型(单位,平移,缩放,仿射和透视):

    enum TypeMask {
        kIdentity_Mask      = 0,
        kTranslate_Mask     = 0x01,  //!< set if the matrix has translation
        kScale_Mask         = 0x02,  //!< set if the matrix has X or Y scale
        kAffine_Mask        = 0x04,  //!< set if the matrix skews or rotates
        kPerspective_Mask   = 0x08   //!< set if the matrix is in perspective
    };

#Matrix的旋转变换:

I.以原点为中心旋转

对于离原点距离为r,与X轴夹角为a的原始点R0(X0,Y0):
原始点r0
left lbrace matrix{ X_{0} = r cos(a) ## Y_{0} = r sin(a)} right none

旋转b角后,新的点R1(X1,Y1):
旋转角度b后的点r1
left lbrace matrix{ X_{1} = r cos(a+b) = r(cos(a)cos(b) - sin(a)sin(b)) = X_{0}cos(b) - Y_{0}sin(b) ## Y_{1} = r sin(a+b) = r(sin(a)cos(b) + sin(b)cos(a)) = Y_{0}cos(b) + X_{0}sin(b)} right none

三角函数公式

转换为矩阵公式即为:
点r0旋转b角矩阵公式
left [ matrix{X_{1} ## Y_{1}} right ] = left [ matrix{cos(b) # -sin(b) ## sin(b) # cos(b)} right ] * left [ matrix{X_{0} ## Y_{0}} right ]

II. 以(px,py)为中心点旋转

以(px,py)为中心点旋转,可分为三步完成:

1. 平移坐标系到(px, py)点:

平移坐标系使(px,py)为原点

left [ matrix{X_{1} ## Y_{1} ## 1} right ] = left [ matrix {1 # 0 # -px ## 0 # 1 # -py ## 0 # 0 #1} right ] * left [ matrix{X_{0} ## Y_{0} ## 1} right ]

2. 以新的原点为中心旋转:

在新原点旋转b角
left [ matrix{X_{2} ## Y_{2} ## 1} right ] = left [ matrix { cos(b) # - sin( b ) # 0 ## sin(b) # cos(b) # 0 ## 0 # 0 #1} right ] * left [ matrix{X_{1} ## Y_{1} ## 1} right ]

3. 平移坐标系至原始位置:

平移回坐标系
left [ matrix{X_{3} ## Y_{3} ## 1} right ] = left [ matrix {1 # 0 # px ## 0 # 1 # py ## 0 # 0 #1} right ] * left [ matrix{X_{2} ## Y_{2} ## 1} right ]

整个过程即为(注意:矩阵乘法不满足交换率):

整个以(px,py)为中心的旋转过程left [ matrix{X_{3} ## Y_{3} ## 1} right ] = left [ matrix {1 # 0 # px ## 0 # 1 # py ## 0 # 0 #1} right ] * left [ matrix { cos(b) # - sin( b ) # 0 ## sin(b) # cos(b) # 0 ## 0 # 0 #1} right ] * left [ matrix {1 # 0 # -px ## 0 # 1 # -py ## 0 # 0 #1} right ] * left [ matrix{X_{0} ## Y_{0} ## 1} right ]

整个以(px,py)为中心的旋转过程_1left [ matrix{X_{3} ## Y_{3} ## 1} right ] = left [ matrix { cos(b) # - sin( b ) # px ## sin(b) # cos(b) # py ## 0 # 0 #1} right ] * left [ matrix {1 # 0 # -px ## 0 # 1 # -py ## 0 # 0 #1} right ] * left [ matrix{X_{0} ## Y_{0} ## 1} right ]

整个以(px,py)为中心的旋转过程_2left [ matrix{X_{3} ## Y_{3} ## 1} right ] = left [ matrix { cos(b) # - sin( b ) # sin(b)*py+(1-cos(b))*px ## sin(b) # cos(b) # (1-cos(b))*py-sin(b)*px ## 0 # 0 #1} right ] * left [ matrix{X_{0} ## Y_{0} ## 1} right ]

对应函数SkMatrix::setSinCos

Matrix的错切变换:

以(px,py)为中心点做(sx,sy)错切:

以(px,py)为中心点做(sx,sy)错切left [ matrix{X_{1} ## Y_{1} ## 1} right ] = left [ matrix {1 # 0 # px ## 0 # 1 # py ## 0 # 0 #1} right ] * left [ matrix { 1 # sx # 0 ## sy # 1 # 0 ## 0 # 0 #1} right ] * left [ matrix {1 # 0 # -px ## 0 # 1 # -py ## 0 # 0 #1} right ] * left [ matrix{X_{0} ## Y_{0} ## 1} right ]

以(px,py)为中心点做(sx,sy)错切_最终矩阵
left [ matrix{X_{1} ## Y_{1} ## 1} right ] = left [ matrix {1 # sx # -sxpy ## sy # 1 # -sypx ## 0 # 0 #1} right ] * left [ matrix{X_{0} ## Y_{0} ## 1} right ]

对应函数SkMatrix::setSkew

preconcats和postconcats处理

初始点为P0,转换后为P1,此矩阵为M:

只有此矩阵,没有preconcats和postconcats处理时, P1 = M * P0
preconcats表示参数中的值先于给定矩阵处理(M’ = M * TKS(x,y)) 即 P1 = M’ * P0 = M * TKS(x,y) * P0
postconcats表示参数中的值在矩阵处理后再处理(M’ = TKS(x,y) * M) 即 P1 = M’ * P0 = TKS(x,y) * M * P0

以点P0(2,0),做T(1,0)平移和S(3,1)缩放:

先平移,再缩放,P1位置为(3,0);
先缩放,再平移,P1位置为(5,0);

Android中图像变换Matrix的原理、代码验证和应用(二) 第二部分 代码验证 在第一部分中讲到的各种图像变换的验证代码如下,一共列出了10种情况。如果要验证其中的某一种情况,只需将相应的代码反注释即可。试验中用到的图片: 其尺寸为162 x 251。   每种变换的结果,请见代码之后的说明。 package com.pat.testtransformmatrix; import android.app.Activity; import 阅读详情

相关推荐

Android----Matrix-与坐标变换

创建矩阵之后,就可以使用Matrix提供的方法设置矩阵了,例如上面的代码在ScaleType为时使用设置为居中。当然了,创建并设置好Matrix之后,再使用设置进来也可以达到同样的效果。

2401_85767280的博客 2099

Matrix学习3、Matrix的基本三种变换之Translation、Skew、Rotate

Matrix的3*3矩阵: [java] view plaincopy {MSCALE_X,MSKEW_X,MTRANS_X,     MSKEW_Y,MSCALE_Y,MTRANS_Y,     MPERSP_0,MPERSP_1,MPERSP_2}     一、平移(Translation)变换 Translation的变换是

siyehua的专栏 5909

Android----Matrix-与坐标变换,最新Android开发进阶

前言 首先声明,楼主不是什么大牛,没有多牛逼的技术,只是公司扩招团队,有幸作为技术面试官,面试了这么多人之后的感想,希望对大家有一点点帮助。 // ImageView.java private Matrix mMatrix; private Matrix mDrawMatrix; // 在构造函数中调用 private void initImageView() { mMatrix = new Matrix(); mScaleType = ScaleType.FIT_CENTER; } public vo

code8889的博客 629

Matrix 变换原理

转载原文:https://www.cnblogs.com/zhangming-blog/articles/5356073.html Android里面提供了对Matrix操作的一系列方便的接口。 Matrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种,每一种变换在Android的API里都提供了set, post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点。set是直接设置Matrix的值,每次set一次,整个Ma

CAir2的专栏 1457

Android开发中Matrix图像变换实战详解

虽然Matrix仅支持仿射变换(无法实现真正的透视投影),但可通过“梯形逼近”模拟透视效果。例如,使图像顶部比底部窄,营造远近感。一种近似方案是结合Camera类或手动构造四点映射(需配合Polygon或自定义Shader)。但在纯Matrix体系中,可尝试以下技巧:// 近似实现左侧压缩,右侧正常// 左侧压缩// 添加倾斜,形成梯形尽管这不是严格意义上的透视,但在小角度下能产生类似视觉感受。更精确的做法是使用配合自定义顶点映射,但这已超出Matrix能力范畴。

weixin_42573757的博客 1130

自动驾驶技术路线之争:纯视觉与多模态融合的成本与性能博弈

本文深入剖析了自动驾驶领域两大主流技术路线——纯视觉与多模态融合的本质差异。文章从成本结构、性能博弈与商业逻辑等多维度展开,揭示了纯视觉方案在硬件成本与数据算力投入上的权衡,以及多模态融合方案在安全冗余与感知稳定性方面的优势。这场技术路线之争,实则是车企在性能、成本与商业化落地之间寻求平衡的综合博弈。

weixin_29038303的博客 391

Matrix学习笔记(一):原理

基本概念 缩放 错切Skew 旋转Rotate 平移Translate Matrix复合原理 下面我们用不同对方式来构造一个矩阵 仅用pre 仅用post 混合 Matrix方法表基本概念错切:实际上是平面景物在投影平面上的非垂直投影。错切使图像中的图形产生扭变。 仿射变换:仿射变换是 线性变换(缩放,旋转,错切) 和 平移变换(平移) 的复合。 Matrix :是一个3维矩阵,最根本的作用就是

三七的博客 5809

论文阅读—Square Attack: a query-efficient black-box adversarial attack via random search

论文阅读—Square Attack: a query-efficient black-box adversarial attack via random search 发表位置 ECCV 2020 摘要 作者提出了一种基于得分的黑盒Square attack,该模型不依赖于模型的局部梯度信息,因此可以绕过梯度隐藏防御攻击。Square Attack是一种随机搜索方法,它在随机位置选择局部的方形更新,使得每次迭代时扰动近似位于可行集的边界。 背景 当涉及到对安全至关重要的机器学习应用时,对抗性的例子尤其值得

yayayamaomaoya的博客 2495

Matrix的基本三种变换Scale、Translation、Skew

Matrix由3*3矩阵中9个值来决定。而我们对Matrix的所有设置,也是对这9个值的各种不同的改变,来达到我们想要的效果。 下面是Matrix3*3的矩阵结构 {MSCALE_X,MSKEW_X,MTRANS_X, MSKEW_Y,MSCALE_Y,MTRANS_Y, MPERSP_0,MPERSP_1,MPERSP_2} 一、首先介绍Scale缩放的控制 scale就

rainy_day_2014的专栏 4594

QT快速配置MSVC2017编译环境(3分钟极简指南)

本文提供了一份3分钟极简指南,帮助开发者快速配置QT的MSVC2017编译环境。通过断网安装、精准勾选组件和配置QT Creator编译器路径等步骤,大幅提升QT开发效率。MSVC2017作为Windows平台高性能C++编译器,特别适合处理大型QT项目,编译速度优势明显。

weixin_30399821的博客 504

STM32 使用IO口模拟I2C时序

上一篇《I2C协议详解》 我们了解了I2C的操作流程,这一篇,我们就使用I2C,来对EEPROM进行操作吧。 我们做两种选择: 1.时序由IO口模拟高低电平,需要了解协议并按照协议操作相应的IO口。 2.时序由硬件自行产生,不需要人工干预; 由硬件产生的I2C时序,我们借助Stm32Cube配置实现便可,我们这一篇,抛开Stm32Cube,手撕代码,根据I2C的时序,一步步地实现I2C对...

8937

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

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

loveseal518的博客 857

IC 时钟设计核心问题与高质量系统设计指南(附源码)

本文深入探讨了IC时钟设计的核心问题与高质量系统设计方法。时钟系统作为IC的"心脏",其性能直接影响时序稳定性、功耗效率和可靠性。文章从五个维度展开分析:时钟源选择与性能匹配、时钟分配网络设计、抖动抑制、多时钟域管理和功耗优化。针对高质量时钟系统设计,提出了时钟源优化、时钟树结构优化、干扰抑制与仿真验证等具体方法。同时,系统阐述了时钟与复位的协同设计关系,强调异步复位同步释放等技术的重要性。文章还总结了高质量IC系统设计的综合要点,包括电源/信号完整性、时序功耗平衡、可靠性设计及全流程验

Open 1061

Android中图像变换Matrix的原理应用,面试安卓系统架构

canvas.drawBitmap(bitmap, matrix, null); super.onDraw(canvas); } @Override public void setImageMatrix(Matrix matrix) { this.matrix.set(matrix); super.setImageMatrix(matrix); } public Bitmap getImageBit..

m0_64319298的博客 1707

Sigrity Power DC Resitance Network Model Generation模式生成电阻SPICE模型操作指导

Sigrity Power DC Resitance Network Model Generation模式是用于提取负载每个pin电阻SPICE模型的,结果以spice网表形式展现,仍然以Motherboard.spd为例进行说明。目的是模拟实际情况,via的孔壁电镀1mil,中间是空心的,让via不完全被填充金属成为实心via。Upper/lower Tolerance:上下公差,设置为5%,也就是压降允许的范围。P/F Mode:通过/失败模式,选择Worst,最差的情况。

weixin_54787054的博客 418

【100分- 求最多可以派出多少支团队】(题目+思路+Java&C++&Python解析+在线测试)

用数组代表每个人的能力,一个比赛活动要求参赛团队的最低能力值为N,每个团队可以由1人或者2人组成,且1个人只能参加1个团队,计算出最多可以派出多少只符合要求的团队。

m0_73659489的博客 313

Android:使用Matrix控制变换

一、使用Matrix控制变换  Matrix是Android提供的一个矩阵工具类,本身不能对图像或组件进行变换,但它可以和其它API结合起来控制图形、组件的变换;  Matrix提供了如下方法来控制平移、旋转和缩放:  setTranslate(float dx,float dy):控制Matrix进行平移;  setSkew(float kx,fl

1024工场 1万+

PCL 点到面的ICP算法【2024最新版】

经典的点到面的ICP算法。博客长期更新,本文最新更新时间为:2024年10月18日。

点云侠的博客 36万+

Android图形变换——Matrix学习

说到Android的图形变换就不得不提Matrix,包括安卓在内的很多计算机图形的变换都是基于矩阵来进行的,常规的操作如平移,旋转,缩放等操作,都是通过矩阵之间的相加,前乘、后乘来实现的。 那么首先,我们就必须知道,为什么Android中的Matrix是一个3*3的坐标系,而不是4*4或者2*2呢。我们知道,如果要实现平移变换,只需要对对象的x,y值进行操作即可 写成矩阵的形式就是 ...

浩浩的代码花园 377

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android图像变换之Matrix

Matrix中文意思是矩阵,在android中Matrix代表的就是一个3x3的举证,Matrix主要用在图片处理上,它可以对图片进行缩放、平移、旋转等,下面逐一分析Matrix的各个函数。 Matrix():构造函数,新建一个标准的矩阵,也就是3x3的单位矩阵 Matrix(Matrix m):构造函数,创建一个m为样本的矩阵,若m为null则创建一个标准矩阵 void getVa

gu_solo的博客 1404

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android中图像变换Matrix的原理分析

一  Matrix的数学原理       在Android中,如果你用Matrix进行过图像处理,那么一定知道Matrix这个类。android中的Matrix是一个3 x 3的矩阵,其内容如下: Matrix的对图像的处理可分为四类基本变换:  Translate           平移变换 Rotate                旋转变换 Scale        

ABang的博客 849

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Android——Matrix变换矩阵的探索(1)

本文是从个人学习过程中所记录的笔记中经过再次整理而得,所有观点仅代表个人理解,如有错误,还望指出。矩阵的基本原理标准矩阵标准矩阵又称为对角矩阵,它的形式如下: 1,0,0 0,1,0 0,0,1矩阵的运算原理矩阵的简单运算规则:左矩阵的一行的每个值,分别按顺序一一对应的乘上右矩阵的一列的值。也就是说

chice的博客 3049

android 单位矩阵,Android矩阵变换讲解Matrix

在二维的平面上,对图片进行处理时,主要可以分为平移,缩放和旋转,如果是直接对图片坐标进行处理显然是很复杂的,这是我们就可以用到矩阵,在矩阵中有单位矩阵这么个概念,我的理解就是这是一个标准的坐标系,其他的变换都是基于这个坐标来的,可能理解有出入,不过这我能想到跟实际相关联的。下面先来看看2D图形变换中的平移:我们先假设平面上有一点(x,y),这个点向x,y方向上平移了dx,dy,变换后的坐标(X,Y...

weixin_30582943的博客 772

关于android中matrix变换

转自:http://www.cnblogs.com/qiengo/archive/2012/06/30/2570874.html Android Matrix Matrix的数学原理 平移变换 旋转变换 缩放变换 错切变换 对称变换 代码验证   Matrix的数学原理 在Android中,如果你用M

shan987的专栏 1527

android Matrix图片变换处理

今天,讲讲android  Matrix图片变换处理的内容。 Matrix   对于一个图片变换的处理,需要Matrix类的支持,它位于"android.graphics.Matrix"包下,是Android提供的一个矩阵工具类,它本身不能对图像或View进行变换,但它可与其他API结合来控制图形、View的变换,如Canvas。   Matrix提供了一些方法来控制图片变换

谢岩的博客 1017

Android Matrix图像变换处理

Canvas类中drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)方法中有个参数类型是Matrix,从字面上理解是矩阵的意思,而实际上它也确实是个3x3的矩阵。Matrix在Android中的主要作用是图像变换,如平移、旋转、缩放、扭曲等。 关于图像如何通过矩阵进行变化可参考这篇文章图像处理—关于像素坐标矩阵变换(平移,旋转,缩放,错切)Ma

薛瑄的博客 7280
上一篇: 贝塞尔曲线
下一篇: Java7,8(<<写给大忙人看的Java SE8>>摘要)
ProgramResearch
博客等级 码龄11年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值