我有以下问题:我正在使用AVFoundation扫描QR码。这非常有效,我还可以通过添加子视图并按frame
设置subview.frame = qrCodeObject.bounds
属性来围绕代码创建边框。这只会出现边框只是一个矩形并且忽略QR码透视的问题。
我知道qrCodeObject有一个属性corners
,它包含检测到的QR码的右上角,左上角,右下角和左下角。
我现在的问题是:如何将这些角点应用到“边框”视图,使此边框与QR代码具有相同的视角?或者换句话说:如何根据角点“转换”视图?
提前多多感谢!
更新
在这里你可以看到问题:红色框是一个UIView,它的frame
属性设置为QR代码bounds
属性。这错过了观点。我想将UIView(红色框)转换为跟随QR码的corners
属性,其中包括右上角,左上角,右下角和左下角(CGPoint
)二维码。将它应用于UIView非常重要,因为我后来想将它应用于ImageView。另外一个掩码是不可用的,因为它只隐藏了部分视图,但没有拉伸或转换视图的内容。
答案 0 :(得分:1)
我找到了一个解决方案:AGGeometryKit做了诀窍:https://github.com/hfossli/AGGeometryKit/
感谢大家的帮助!
答案 1 :(得分:0)
据我所知,您无法以这种方式转换CGRect。 (至少我不知道任何可以进行这种图像处理的框架。)
您可以使用qrCodeObject的点绘制多边形。
在你的UIView的drawRect
中,更改使用CGContext和CGPath来绘制你想要的路径。
您希望绘图UIView的大小与显示QR代码的大小相同,这样您就不必将这些点转换为第二个坐标空间。
如果您需要有关如何执行此操作的更多指导,请答案 2 :(得分:0)
好的,你面临的问题是CGRect
只能代表一个没有倾斜或扭曲的矩形。你正在处理的是一种具有不同视角失真的图像。
我没有尝试这样做,但听起来像AVFoundation出于某种原因给你4个CGPoint对象。您需要使用CGPoint
绘制这4个UIBezierPath
,而不是尝试绘制CGRect。只需创建一个移动到第一个点的贝塞尔曲线路径,然后绘制线条到每个后续点,最后再回到第一个点。这将为您提供一个考虑到QR码失真的四边形。
答案 3 :(得分:0)
CATransform3DRotate可能是你的朋友,在这里。
https://guides.codepath.com/ios/Using-Perspective-Transforms可能是一个很好的起点。