Skip to content

Commit 81f66e9

Browse files
committed
Update
1 parent e3238a2 commit 81f66e9

File tree

1 file changed

+29
-17
lines changed

1 file changed

+29
-17
lines changed

CustomView/Advance/[10]Matrix_Method.md

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -410,14 +410,14 @@ boolean setPolyToPoly (
410410
int srcIndex, // 原始数组开始位置
411411
float[] dst, // 目标数组 dst [x,y],存储内容为一组点
412412
int dstIndex, // 目标数组开始位置
413-
int pointCount) // 要使用点的数量 取值范围是: 0到4
413+
int pointCount) // 测控点的数量 取值范围是: 0到4
414414
```
415415
416416
Poly全称是Polygon,多边形的意思,了解了意思大致就能知道这个方法是做什么用的了,应该与PS中自由变换中的扭曲有点类似。
417417
418418
![](http://ww1.sinaimg.cn/large/005Xtdi2jw1f71ppx7q0lg30go0b44ga.gif)
419419
420-
> 从参数我们可以了解到setPolyToPoly最多可以支持4个点,也就是图形的四个角,可以通过这四个角将视图从矩形变换成其他形状。
420+
> 从参数我们可以了解到setPolyToPoly最多可以支持4个点,这四个点通常为图形的四个角,可以通过这四个角将视图从矩形变换成其他形状。
421421
422422
简单示例:
423423
@@ -480,13 +480,13 @@ public class MatrixSetPolyToPolyTest extends View {
480480
481481
482482
483-
| pointCount | 摘要 |
484-
| :--------: | --------------------- |
485-
| 0 | 相当于`reset` |
486-
| 1 | 相当于`translate` |
487-
| 2 | 可以作 缩放、旋转、平移 变换 |
488-
| 3 | 可以作 缩放、旋转、平移、错切 变换 |
489-
| 4 | 可以作 缩放、旋转、平移、错切以及任何形变 |
483+
| pointCount | 摘要 |
484+
| :--------: | ---------------------- |
485+
| 0 | 相当于`reset` |
486+
| 1 | 相当于`translate` |
487+
| 2 | 可以进行 缩放、旋转、平移 变换 |
488+
| 3 | 可以进行 缩放、旋转、平移、错切 变换 |
489+
| 4 | 可以进行 缩放、旋转、平移、错切以及任何形变 |
490490
491491
> 从上表我们可以观察出一个规律, 随着`pointCount`数值增大setPolyToPoly的可以操作性也越来越强,这不是废话么,可调整点数多了能干的事情自然也多了。
492492
>
@@ -498,17 +498,17 @@ public class MatrixSetPolyToPolyTest extends View {
498498
499499
作为开发人员,写出来的代码出了要让机器"看懂",没有歧义之外,最重要的还是让人看懂,以方便后期的维护修改,从上边的表格中可以看出,前面的几种种情况都可以有更直观的替代方法,只有四个参数的情况下的特殊形变是没有替代方法的。
500500
501+
**测控点选取位置?**
501502
503+
测控点可以选择任何你认为方便的位置,只要src与dst一一对应即可。不过为了方便,通常会选择一些特殊的点: 图形的四个角,边线的中心点以及图形的中心点等。**不过有一点需要注意,测控点选取都应当是不重复的(src与dst均是如此),如果选取了重复的点会直接导致测量失效,这也意味着,你不允许将一个方形(四个点)映射为三角形(四个点,但其中两个位置重叠),但可以接近于三角形。**。
502504
503-
**控制点的选取和作用范围:**
505+
**作用范围?**
504506
505-
控制点你可以选择任何位置,不过为了便于理解和使用,一般会选择特殊点,例如:图形的四个角,边线的中心点以及图形的中心点,当然了,只要是你觉得方便的点都可以选取。不过有一点需要注意,**选取点和映射点都应当是不重复的,如果选取了重复的点会直接导致测量失效,这也意味着,你不允许将一个方形映射为三角形(可以接近于三角形)**。
506-
507-
关于作用范围当然是设置了Matrix的全部范围,如果你将这个Matrix赋值给了Canvas,它的作用范围就是整个Canvas,如果你赋值给了Bitmap,它的作用范围就是整张图片。但是如果你仅仅测量并改变了图片的一部分,那么剩余的部分也会改变,不过并不推荐这么做,因为这样做你可能会得到一些异常的结果,这是底层逻辑导致的,由于其是根据你选取的映射区域来反向推导构建出来的Matrix,所以在你选取的区域直接结果是没有问题的,但在区域之外的结果可能与你想要的会存在差别。
507+
作用范围当然是设置了Matrix的全部区域,如果你将这个Matrix赋值给了Canvas,它的作用范围就是整个画布,如果你赋值给了Bitmap,它的作用范围就是整张图片。
508508
509509
*****
510510
511-
**以下示例的src均为图片大小,dst根据手势变化。**
511+
**一下用示例演示一下,所有示例的src均为图片大小,dst根据手势变化。**
512512
513513
**pointCount为0**
514514
@@ -521,7 +521,7 @@ if (0 == count) {
521521
}
522522
```
523523
524-
524+
![](http://ww4.sinaimg.cn/large/005Xtdi2jw1f7b7v5z6k3g308c0cxdg6.gif)
525525
526526
**pointCount为1**
527527
@@ -536,17 +536,29 @@ if (1 == count) {
536536
537537
> 平移的距离是dst - src.
538538
539+
当测控点为1的时候,由于你只有一个点可以控制,所以你只能拖拽着它在2D平面上滑动。
539540
541+
![](http://ww3.sinaimg.cn/large/005Xtdi2jw1f7b7vp3id5g308c0cxdyx.gif)
540542
541543
**pointCount为2**
542544
543-
当pointCount为2的时候,可以做缩放、平移和旋转,对于这两个控制点
545+
当pointCount为2的时候,可以做缩放、平移和旋转。
546+
547+
![](http://ww2.sinaimg.cn/large/005Xtdi2jw1f7b7w51e52g308c0cxx2k.gif)
548+
549+
**pointCount为3**
550+
551+
当pointCount为3的时候,可以做缩放、平移、旋转和错切。
544552
553+
![](http://ww4.sinaimg.cn/large/005Xtdi2jw1f7b7x5mxnug308c0cxwnz.gif)
545554
555+
**pointCount为4**
546556
547-
魔力不足,正在蓄力中...
557+
当pointCount为4的时候,你可以将图像拉伸为任意四边形。
548558
559+
![](http://ww1.sinaimg.cn/large/005Xtdi2jw1f7b7ygigbrg308c0cxaks.gif)
549560
561+
上面已经用图例比较详细的展示了不同操控点个数的情况,如果你依旧存在疑问,可以获取代码自己试一下。
550562
551563
#### 2.setRectToRect
552564

0 commit comments

Comments
 (0)