我被困在我的应用程序的功能。 我想裁剪类似凸轮扫描仪裁切功能。 CAM-扫描仪的屏幕是:我已经创建了类似的作物视图。
我已经获得的四角CGPoint。 但是,我怎么能在斜获得裁剪图像。
如果可能,请给我一些建议。
我被困在我的应用程序的功能。 我想裁剪类似凸轮扫描仪裁切功能。 CAM-扫描仪的屏幕是:我已经创建了类似的作物视图。
我已经获得的四角CGPoint。 但是,我怎么能在斜获得裁剪图像。
如果可能,请给我一些建议。
这是一个透视变换问题。 在这种情况下,他们正在策划在2D平面上的3D投影。
如,第一图像具有在四边形形状选择的角和时为矩形形状的变换,那么你要么需要添加更多的像素信息( 插值 )或删除一些像素。
所以现在实际的问题是额外的像素信息添加到裁剪图像并投以产生第二图像。 它可以用各种方式来实现:
<>您可以通过自己的用内插法应用的角度穿越 - 矩阵实现它。
<>您可以使用的OpenGL 。
<>您可以使用OpenCV的 。 ..而且还有更多来实现它的方式。
我使用了OpenCV的解决了这个问题。 在OpenCV的以下功能将帮助您实现这一目标。
cvPerspectiveTransform
cvWarpPerspective
第一功能将使用源和目的地投影坐标计算变换矩阵。 在你的情况的src数组将有来自CGPoint值的所有角落。 和dest将具有例如{(0,0)(200,0)(200150)(0150)}矩形投影点。
一旦你变换矩阵,你需要将它传递给第二功能。 您可以访问这个线程 。
可能有一些其他的替代OpenCV库,但它的图像处理算法好好珍藏。
与OpenCV库的iOS应用可以在eosgarden 。
我看到两种可能性。 首先是计算转换矩阵偏的形象,并在您的视图的层的CATransform3D财产安装。
这将是简单的,假设你知道如何形成转换矩阵,它做了拉伸。 我从来没有学会如何构建伸展或歪斜的图像转换矩阵,所以我不能帮上什么忙。 我建议谷歌搜索变换矩阵和拉伸/倾斜。
另一种方法是把你裁剪图像的一部分进入一个OpenGL纹理和纹理映射到你的输出。 的实际组织图部分是容易的,但也有大约1000公斤的OpenGL设置做,和一大堆为了得到任何东西进行学习。 如果你想追求这条路线,我会建议寻找使用新的iOS 5 GLKit简单的2D贴图的例子。
使用中给出的链接代码: http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/
而不是使用的CGRect和CGContextClipToRect的请尝试使用CGContextEOClip或CGContextClosePath
虽然我havnt尝试这个...但我已经尝试图纸上的touchesBegan和TouchesMoved和TouchesEnd事件使用CGContextClosePath封闭路径。
希望这可以更深入到您的问题...