我有一个包含梯形截面的图像,需要将其转换为正方形形状(歪斜)。我真的很难理解3D转换矩阵,也不知道从哪里开始。
目前,我有4个CGPoints代表一个偏斜的形状,我也有4个CGPoints代表一个统一的矩形。如何将最初的4个CGPoint转换为3D转换矩阵以对图像进行去偏斜?
我基本上是在寻找相反的东西:iPhone image stretching (skew)
第一个图像将是输入形状,而正方形图像将是输出形状。
谁能指出我正确的方向?
最佳答案
找到2个最高的CGPoint并对其进行级别调整,同时在此级别中将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;
对最低点和x值进行相似的操作,最左边的2个点和最右边的2个CGPoints。
您还可以添加一个捕捉功能,当点之间的速度小于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/