3

我有一个包含梯形部分的图像,我需要将其转换为方形(去偏斜)。我真的很难理解 3D 转换矩阵,不知道从哪里开始。

目前我有 4 个 CGPoints 代表一个倾斜的形状,我也有 4 个 CGPoints 代表一个统一的矩形。我如何将最初的 4 个 CGPoints 转换为 3D 变换矩阵来歪斜图像?

我基本上是在寻找它的反面:iPhone image stretching (skew)

第一个图像将是输入形状,方形图像将是输出。

谁能指出我正确的方向?

4

1 回答 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;

对最左边的 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);
于 2012-08-07T17:46:25.367 回答