Update
This commit is contained in:
@@ -410,14 +410,14 @@ boolean setPolyToPoly (
|
||||
int srcIndex, // 原始数组开始位置
|
||||
float[] dst, // 目标数组 dst [x,y],存储内容为一组点
|
||||
int dstIndex, // 目标数组开始位置
|
||||
int pointCount) // 要使用点的数量 取值范围是: 0到4
|
||||
int pointCount) // 测控点的数量 取值范围是: 0到4
|
||||
```
|
||||
|
||||
Poly全称是Polygon,多边形的意思,了解了意思大致就能知道这个方法是做什么用的了,应该与PS中自由变换中的扭曲有点类似。
|
||||
|
||||

|
||||
|
||||
> 从参数我们可以了解到setPolyToPoly最多可以支持4个点,也就是图形的四个角,可以通过这四个角将视图从矩形变换成其他形状。
|
||||
> 从参数我们可以了解到setPolyToPoly最多可以支持4个点,这四个点通常为图形的四个角,可以通过这四个角将视图从矩形变换成其他形状。
|
||||
|
||||
简单示例:
|
||||
|
||||
@@ -481,12 +481,12 @@ public class MatrixSetPolyToPolyTest extends View {
|
||||
|
||||
|
||||
| pointCount | 摘要 |
|
||||
| :--------: | --------------------- |
|
||||
| :--------: | ---------------------- |
|
||||
| 0 | 相当于`reset` |
|
||||
| 1 | 相当于`translate` |
|
||||
| 2 | 可以作 缩放、旋转、平移 变换 |
|
||||
| 3 | 可以作 缩放、旋转、平移、错切 变换 |
|
||||
| 4 | 可以作 缩放、旋转、平移、错切以及任何形变 |
|
||||
| 2 | 可以进行 缩放、旋转、平移 变换 |
|
||||
| 3 | 可以进行 缩放、旋转、平移、错切 变换 |
|
||||
| 4 | 可以进行 缩放、旋转、平移、错切以及任何形变 |
|
||||
|
||||
> 从上表我们可以观察出一个规律, 随着`pointCount`数值增大setPolyToPoly的可以操作性也越来越强,这不是废话么,可调整点数多了能干的事情自然也多了。
|
||||
>
|
||||
@@ -498,17 +498,17 @@ public class MatrixSetPolyToPolyTest extends View {
|
||||
|
||||
作为开发人员,写出来的代码出了要让机器"看懂",没有歧义之外,最重要的还是让人看懂,以方便后期的维护修改,从上边的表格中可以看出,前面的几种种情况都可以有更直观的替代方法,只有四个参数的情况下的特殊形变是没有替代方法的。
|
||||
|
||||
**测控点选取位置?**
|
||||
|
||||
测控点可以选择任何你认为方便的位置,只要src与dst一一对应即可。不过为了方便,通常会选择一些特殊的点: 图形的四个角,边线的中心点以及图形的中心点等。**不过有一点需要注意,测控点选取都应当是不重复的(src与dst均是如此),如果选取了重复的点会直接导致测量失效,这也意味着,你不允许将一个方形(四个点)映射为三角形(四个点,但其中两个位置重叠),但可以接近于三角形。**。
|
||||
|
||||
**控制点的选取和作用范围:**
|
||||
**作用范围?**
|
||||
|
||||
控制点你可以选择任何位置,不过为了便于理解和使用,一般会选择特殊点,例如:图形的四个角,边线的中心点以及图形的中心点,当然了,只要是你觉得方便的点都可以选取。不过有一点需要注意,**选取点和映射点都应当是不重复的,如果选取了重复的点会直接导致测量失效,这也意味着,你不允许将一个方形映射为三角形(可以接近于三角形)**。
|
||||
|
||||
关于作用范围当然是设置了Matrix的全部范围,如果你将这个Matrix赋值给了Canvas,它的作用范围就是整个Canvas,如果你赋值给了Bitmap,它的作用范围就是整张图片。但是如果你仅仅测量并改变了图片的一部分,那么剩余的部分也会改变,不过并不推荐这么做,因为这样做你可能会得到一些异常的结果,这是底层逻辑导致的,由于其是根据你选取的映射区域来反向推导构建出来的Matrix,所以在你选取的区域直接结果是没有问题的,但在区域之外的结果可能与你想要的会存在差别。
|
||||
作用范围当然是设置了Matrix的全部区域,如果你将这个Matrix赋值给了Canvas,它的作用范围就是整个画布,如果你赋值给了Bitmap,它的作用范围就是整张图片。
|
||||
|
||||
*****
|
||||
|
||||
**以下示例的src均为图片大小,dst根据手势变化。**
|
||||
**一下用示例演示一下,所有示例的src均为图片大小,dst根据手势变化。**
|
||||
|
||||
**pointCount为0**
|
||||
|
||||
@@ -521,7 +521,7 @@ if (0 == count) {
|
||||
}
|
||||
```
|
||||
|
||||
|
||||

|
||||
|
||||
**pointCount为1**
|
||||
|
||||
@@ -536,17 +536,29 @@ if (1 == count) {
|
||||
|
||||
> 平移的距离是dst - src.
|
||||
|
||||
当测控点为1的时候,由于你只有一个点可以控制,所以你只能拖拽着它在2D平面上滑动。
|
||||
|
||||

|
||||
|
||||
**pointCount为2**
|
||||
|
||||
当pointCount为2的时候,可以做缩放、平移和旋转,对于这两个控制点
|
||||
当pointCount为2的时候,可以做缩放、平移和旋转。
|
||||
|
||||

|
||||
|
||||
**pointCount为3**
|
||||
|
||||
魔力不足,正在蓄力中...
|
||||
当pointCount为3的时候,可以做缩放、平移、旋转和错切。
|
||||
|
||||

|
||||
|
||||
**pointCount为4**
|
||||
|
||||
当pointCount为4的时候,你可以将图像拉伸为任意四边形。
|
||||
|
||||

|
||||
|
||||
上面已经用图例比较详细的展示了不同操控点个数的情况,如果你依旧存在疑问,可以获取代码自己试一下。
|
||||
|
||||
#### 2.setRectToRect
|
||||
|
||||
|
||||
Reference in New Issue
Block a user