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

419
419
420
- > 从参数我们可以了解到setPolyToPoly最多可以支持4个点,也就是图形的四个角 ,可以通过这四个角将视图从矩形变换成其他形状。
420
+ > 从参数我们可以了解到setPolyToPoly最多可以支持4个点,这四个点通常为图形的四个角 ,可以通过这四个角将视图从矩形变换成其他形状。
421
421
422
422
简单示例:
423
423
@@ -480,13 +480,13 @@ public class MatrixSetPolyToPolyTest extends View {
480
480
481
481
482
482
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 | 可以进行 缩放、旋转、平移、错切以及任何形变 |
490
490
491
491
> 从上表我们可以观察出一个规律, 随着`pointCount`数值增大setPolyToPoly的可以操作性也越来越强,这不是废话么,可调整点数多了能干的事情自然也多了。
492
492
>
@@ -498,17 +498,17 @@ public class MatrixSetPolyToPolyTest extends View {
498
498
499
499
作为开发人员,写出来的代码出了要让机器"看懂",没有歧义之外,最重要的还是让人看懂,以方便后期的维护修改,从上边的表格中可以看出,前面的几种种情况都可以有更直观的替代方法,只有四个参数的情况下的特殊形变是没有替代方法的。
500
500
501
+ **测控点选取位置?**
501
502
503
+ 测控点可以选择任何你认为方便的位置,只要src与dst一一对应即可。不过为了方便,通常会选择一些特殊的点: 图形的四个角,边线的中心点以及图形的中心点等。**不过有一点需要注意,测控点选取都应当是不重复的(src与dst均是如此),如果选取了重复的点会直接导致测量失效,这也意味着,你不允许将一个方形(四个点)映射为三角形(四个点,但其中两个位置重叠),但可以接近于三角形。**。
502
504
503
- **控制点的选取和作用范围: **
505
+ **作用范围? **
504
506
505
- 控制点你可以选择任何位置,不过为了便于理解和使用,一般会选择特殊点,例如:图形的四个角,边线的中心点以及图形的中心点,当然了,只要是你觉得方便的点都可以选取。不过有一点需要注意,**选取点和映射点都应当是不重复的,如果选取了重复的点会直接导致测量失效,这也意味着,你不允许将一个方形映射为三角形(可以接近于三角形)**。
506
-
507
- 关于作用范围当然是设置了Matrix的全部范围,如果你将这个Matrix赋值给了Canvas,它的作用范围就是整个Canvas,如果你赋值给了Bitmap,它的作用范围就是整张图片。但是如果你仅仅测量并改变了图片的一部分,那么剩余的部分也会改变,不过并不推荐这么做,因为这样做你可能会得到一些异常的结果,这是底层逻辑导致的,由于其是根据你选取的映射区域来反向推导构建出来的Matrix,所以在你选取的区域直接结果是没有问题的,但在区域之外的结果可能与你想要的会存在差别。
507
+ 作用范围当然是设置了Matrix的全部区域,如果你将这个Matrix赋值给了Canvas,它的作用范围就是整个画布,如果你赋值给了Bitmap,它的作用范围就是整张图片。
508
508
509
509
*****
510
510
511
- **以下示例的src均为图片大小 ,dst根据手势变化。**
511
+ **一下用示例演示一下,所有示例的src均为图片大小 ,dst根据手势变化。**
512
512
513
513
**pointCount为0**
514
514
@@ -521,7 +521,7 @@ if (0 == count) {
521
521
}
522
522
```
523
523
524
-
524
+ 
525
525
526
526
**pointCount为1**
527
527
@@ -536,17 +536,29 @@ if (1 == count) {
536
536
537
537
> 平移的距离是dst - src.
538
538
539
+ 当测控点为1的时候,由于你只有一个点可以控制,所以你只能拖拽着它在2D平面上滑动。
539
540
541
+ 
540
542
541
543
**pointCount为2**
542
544
543
- 当pointCount为2的时候,可以做缩放、平移和旋转,对于这两个控制点
545
+ 当pointCount为2的时候,可以做缩放、平移和旋转。
546
+
547
+ 
548
+
549
+ **pointCount为3**
550
+
551
+ 当pointCount为3的时候,可以做缩放、平移、旋转和错切。
544
552
553
+ 
545
554
555
+ **pointCount为4**
546
556
547
- 魔力不足,正在蓄力中...
557
+ 当pointCount为4的时候,你可以将图像拉伸为任意四边形。
548
558
559
+ 
549
560
561
+ 上面已经用图例比较详细的展示了不同操控点个数的情况,如果你依旧存在疑问,可以获取代码自己试一下。
550
562
551
563
#### 2.setRectToRect
552
564
0 commit comments