我有一个包含梯形部分的图像,我需要将其转换为正方形(倾斜校正)。我真的很难理解 3D 变换矩阵,并且不知道从哪里开始。
目前我有 4 个 CGPoints 代表一个倾斜的形状,我还有 4 个 CGPoints 代表一个均匀的矩形。如何将最初的 4 个 CGPoints 转换为 3D 变换矩阵以校正图像?
我基本上是在寻找与此相反的内容:iPhone image stretching (skew)
其中第一个图像将是输入形状,而方形图像将是输出。
有人能指出我正确的方向吗?
最佳答案
找到 2 个最高的 CGPoint,并将它们调平,同时对 2 个最低的 CGPoint、最左边的 2 个 CGPoint 和最右边的 2 个 CGPoint 进行调平。
//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 个 CGPoint 的 x 值进行类似操作。
您还可以添加一个捕捉功能,当两点之间的速度小于 2 倍速时,可以捕捉到两个点的中心点,即
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);
关于iphone - 将 CGPoints 集转换为 CATransform3D 以校正图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11850924/