我有一个包含梯形部分的图像,我需要将其转换为方形(去偏斜)。我真的很难理解 3D 转换矩阵,不知道从哪里开始。
目前我有 4 个 CGPoints 代表一个倾斜的形状,我也有 4 个 CGPoints 代表一个统一的矩形。我如何将最初的 4 个 CGPoints 转换为 3D 变换矩阵来歪斜图像?
我基本上是在寻找它的反面:iPhone image stretching (skew)
第一个图像将是输入形状,方形图像将是输出。
谁能指出我正确的方向?
我有一个包含梯形部分的图像,我需要将其转换为方形(去偏斜)。我真的很难理解 3D 转换矩阵,不知道从哪里开始。
目前我有 4 个 CGPoints 代表一个倾斜的形状,我也有 4 个 CGPoints 代表一个统一的矩形。我如何将最初的 4 个 CGPoints 转换为 3D 变换矩阵来歪斜图像?
我基本上是在寻找它的反面:iPhone image stretching (skew)
第一个图像将是输入形状,方形图像将是输出。
谁能指出我正确的方向?
找到 2 个最高的 CGPoints,并将它们调平,同时对 2 个最低的 CGPoints、2 个最左边的 CGPoints 和 2 个最右边的 CGPoints 进行这个级别。
//assuming skewpoint1 & skewpoint2 are the highest points
if (skewpoint1.y < skewpoint2.y)
skewpoint1.y += speed;
skewpoint2.y -= speed;
else
skewpoint1.y -= speed;
skewpoint2.y += speed;
对最左边的 2 个和最右边的 2 个 CGPoints 的最低点和 x 值执行类似的操作。
您还可以添加一个捕捉功能,用于当点之间的速度小于 2xspeed 时捕捉到两者的中心点,即
if (abs(skewpoint1.y - skewpoint2.y) < (speed*2))
//depending on which CGPoint is higher
skewpoint1.y += (abs(skewpoint1.y - skewpoint2.y)/2);
skewpoint2.y -= (abs(skewpoint1.y - skewpoint2.y)/2);