将一组CGPoint转换为CATransform3D以校正图像。

3
我有一张包含梯形区域的图片,我需要将其转换为正方形(去除倾斜)。我很难理解3D变换矩阵,并且不知道从哪里开始。
目前,我有4个CGPoints表示一个倾斜的形状,我还有4个CGPoints表示一个均匀的矩形。如何将最初的4个CGPoints转换为3D变换矩阵以去除图像的倾斜?
我基本上在寻找这个的反向过程:iPhone image stretching (skew) 第一张图片将是输入形状,输出将是一个正方形图片。有人能指点我吗?
1个回答

0

找到最高的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;

对于最低点和最左边的两个CGPoint和最右边的两个CGPoint,可以进行类似的操作。

当两点之间的距离小于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);

谢谢您的回答,但这只会将形状移动到一个正方形,而不是矫正图像,对吗?或者我误解了吗?我需要将图像矫正为正方形。 - JWood
好的,“我还有4个CGPoints,它们代表一个统一的矩形。”让我有点困惑:P 我会重新回答,使用类似的方法仍然很简单。 - CurtisJC
抱歉,我们中有人存在误解。我已经有起始点和终止点,我需要做的是将图像转换为适合普通矩形框的形状。因此,在链接帖子中的图像最终看起来会像一个矩形图像,而不是现在所呈现的扭曲形状。我正在尝试解决的是图像处理问题,而不是点的问题。 - JWood
啊,对不起,我完全误解了。我没有意识到涉及到一张图片。 - CurtisJC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接