iphone - 将 CGPoints 集转换为 CATransform3D 以校正图像

标签 iphone image core-graphics quartz-graphics

我有一个包含梯形部分的图像,我需要将其转换为正方形(倾斜校正)。我真的很难理解 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/

相关文章:

ios - UIWebView 路径取决于之前按下的按钮 Xcode

ios - 单击 tableView 单元格时保留 tabController 的已加载 View 部分?

iphone - 在我停止向 Apple 支付开发者费用后,我的应用程序会留在应用程序商店吗?

iphone - 弧在圆上的位置

ios - 链接器错误,但仅限于测试文件

objective-c - 使用图案颜色的描边路径来模拟画笔纹理

iphone - 使图像仅遵循 CGPath 的一部分

javascript - 如何使用 CSS 使图像适合 200 像素的方框?

javascript - jQuery:根据下拉选择更改图像时添加到图像的超链接

java - Wicket 从文件系统创建图像