“千变万化”——神奇的Android图片规格调整器(坐标Matrix篇)

简介: 我们前面介绍了一些图片的信息获取方式,现在我们看看对图片是如何进行变化处理的,这其中有很多方法,我们先说明一下Matrix类的处理方式,也就是对图片坐标的变化以达到最终期望效果。

正篇

溯源

首先,我们找到该类的源代码:


网络异常,图片无法展示
|


通过这个简短的注释说明我们了解到,Matrix是一个3 x 3用于转换坐标的矩阵。


网络异常,图片无法展示
|

使用方法

它对图片的处理可以分为以下四个基本类型:

Translate——平移变换

@Override
public boolean postTranslate(float dx, float dy) {
    oops();
    return false;
}

该方法在x轴和y轴上简单地移动图像,采用两个浮点数作为参数,表示在每个轴上移动的数量。第一个参数是图像将在x轴上移动的数量,而第二个参数是图像将在y轴上移动的数量。在x轴上使用正数进行平移将向右移动图像,而使用负数将向左移动图像。在y轴上使用正数进行平移将向下移动图像,而使用负数将向上移动图像。

Scale——缩放变换

@Override
public boolean postScale(float sx, float sy) {
    oops();
    return false;
}

该方法采用两个浮点数作为参数,分别表示在每个轴上所产生的缩放量。第一个参数是x轴的缩放比例,而第二个参数是y轴的缩放比例。

Rotate——旋转变换

@Override
public boolean postRotate(float degrees, float px, float py) {
    oops();
    return false;
}
@Override
public boolean postRotate(float degrees) {
    oops();
    return false;
}

该方法采用一个浮点数表示旋转的角度。围绕默认点(0,0),正数将顺时针旋转图像,而负数将逆时针旋转图像,其中默认点是图像的左上角。

Skew——错切变换

@Override
public boolean postSkew(float kx, float ky, float px, float py) {
    oops();
    return false;
}
@Override
public boolean postSkew(float kx, float ky) {
    oops();
    return false;
}

错切变换,在数学上又称为Shear mapping(可叫做“剪切变换”)或是Transvection(缩并),它是一种比较特殊的线性变换。错切变换的效果就是让所有点的x坐标(或者y坐标)保持不变,而对应的y坐标(或者x坐标)则按比例发生平移,且平移的大小和该点到x轴(或y轴)的垂直距离成正比。它是属于等面积变换,即一个形状在错切变换的前后,其面积是相等的。

具体说明

该API对于每一种变换都提供了三种操作方式:

set(用于设置Matrix中的值)

post(后乘,根据矩阵的原理,相当于左乘)

pre(先乘,相当于矩阵中的右乘)

注:默认时,这四种变换都是围绕(0,0)点变换的,也可以自定义围绕的中心点,通常围绕中心点。

小结

希望可以早日完成app!

相关文章
|
30天前
|
数据处理 开发工具 数据安全/隐私保护
Android平台RTMP推送|轻量级RTSP服务|GB28181接入之文字、png图片水印的精进之路
本文探讨了Android平台上推流模块中添加文字与PNG水印的技术演进。自2015年起,为了满足应急指挥及安防领域的需求,逐步发展出三代水印技术:第一代为静态文字与图像水印;第二代实现了动态更新水印内容的能力,例如实时位置与时间信息;至第三代,则优化了数据传输效率,直接使用Bitmap对象传递水印数据至JNI层,减少了内存拷贝次数。这些迭代不仅提升了用户体验和技术效率,也体现了开发者追求极致与不断创新的精神。
|
1月前
|
自然语言处理 定位技术 API
Android经典实战之如何获取图片的经纬度以及如何根据经纬度获取对应的地点名称
本文介绍如何在Android中从图片提取地理位置信息并转换为地址。首先利用`ExifInterface`获取图片内的经纬度,然后通过`Geocoder`将经纬度转为地址。注意操作需在子线程进行且考虑多语言支持。
97 4
|
1月前
|
XML 前端开发 Android开发
Android经典实战之Kotlin中实现圆角图片和圆形图片
本文介绍两种实现圆角图像视图的方法。第一种是通过自定义Kotlin `AppCompatImageView`,重写`onDraw`方法使用`Canvas`和`Path`进行圆角剪裁。第二种利用Android Material库中的`ShapeableImageView`,简单配置即可实现圆角效果。两种方法均易于实现且提供动态调整圆角半径的功能。
25 0
|
3月前
|
JSON 编解码 Apache
Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
39 1
|
3月前
|
Java Android开发
18. 【Android教程】图片控件 ImageView
18. 【Android教程】图片控件 ImageView
47 4
|
3月前
|
前端开发 Java API
Android系统中读写和显示图片
Android系统中读写和显示图片
31 0
|
3月前
|
XML Java API
54. 【Android教程】图片资源:Drawable
54. 【Android教程】图片资源:Drawable
44 0
|
8天前
|
存储 Android开发 开发者
探索安卓开发之旅:从新手到专家的必经之路
【9月更文挑战第3天】在这篇文章中,我们将踏上一场激动人心的旅程,深入探索安卓开发的广阔天地。无论你是初涉编程世界的新手,还是期望提升技能的开发者,这里都有你需要的知识与技巧。我们将从基础概念讲起,逐步引导你了解安卓应用的核心组件,并分享实用的开发建议。准备好了吗?让我们一起开启这段成长之旅吧!
|
Android开发
Android AbsListView坐标体系解析
 Android AbsListView坐标体系解析 Android的AbsListView与Android ListView不同,AbsListView代表了一个抽象的列表View。
1030 0
|
2天前
|
安全 Android开发 开发者
探索安卓开发的未来:Kotlin的崛起与Flutter的挑战
在移动开发的广阔天地中,安卓平台始终占据着举足轻重的地位。随着技术的不断进步和开发者需求的多样化,Kotlin和Flutter成为了改变游戏规则的新玩家。本文将深入探讨Kotlin如何以其现代化的特性赢得开发者的青睐,以及Flutter凭借跨平台的能力如何挑战传统的安卓开发模式。通过实际案例分析,我们将揭示这两种技术如何塑造未来的安卓应用开发。
17 6