我正在使用Apple的Vision框架来检测人脸。然后我来到这个功能。
let cgr: CGRect = CGRect(x: 0, y: 0, width: 1, height: 1)
let videoPreviewRect = previewLayer.layerRectConverted(fromMetadataOutputRect: cgr)
其中previewLayer
是AVCaptureVideoPreviewLayer类型对象。它是从metaDataOutput rect到view rect的转换。但我不完全理解它。
它是如何工作的,它转换成什么?
1条答案
按热度按时间5sxhfpxr1#
所以这里的想法是,通常使用像Vision Framework或
AVCaptureMetadataOutput
这样的东西,你会得到归一化的矩形坐标(例如{0,0}-{1,1}范围,就像整个图像的百分比)。然而,如果你想把它们绘制给用户,你可能需要屏幕点的坐标。layerRectConverted(fromMetadataOutputRect:)
和metadataOutputRectConverted(fromLayerRect:)
这对方法将允许您在这两个坐标系之间进行转换,并且还考虑了AVCaptureVideoPreviewLayer
的videoGravity
属性,否则会使计算变得痛苦,例如当使用resizeAspectFill
重力时。