ios - CMSampleBuffer 的翻转/镜像方向
问题描述
我目前有一个非常简单的相机预览应用程序,它AVCaptureVideoDataOutputSampleBufferDelegate
也消耗视频帧。我对这些帧进行了一些处理(现在没有什么困难,我只是平均 r、g、b 的灰度值)并将它们绘制到 UIView 上。
在第一次这样做时,我注意到视图被翻转了。啊,我想,当然默认方向AVCaptureConnection
是LandscapeLeft
,所以我把它改成了Portrait
。现在缓冲区是纵向的。上下翻转。并镜像。
我可以通过将AVCaptureConnection
's videoOrientation
toPortraitUpsideDown
和isVideoMirrored
to设置为我想要的方式来获得它true
,但我不知道为什么我需要这样做,并且找不到相关文档或其他人在做同样的事情。AVCaptureConnection
附加到我的似乎AVCaptureVideoPreviewLayer
没有做同样的事情。我不想仅仅为了看到它在其他设备上中断而进行此更改,所以我想了解这里发生了什么。那么问题来了:为什么我CMSampleBuffer
的 s 在 iOS 11.4 上被倒置并镜像到 iPhone 5s 后置摄像头?我真诚地希望有人能对这种情况有所了解。
解决方案
几个小时后,我可以回答我自己的问题。
从CVImageBuffer
返回的CMSampleBuffer
有一个属isFlipped
性,表示y轴已经翻转。校正此翻转会产生正确的图像。
我站纠正!该isFlipped
属性实际上表明原点在我期望的位置,在左上角。在坐标系被翻转的错误假设下操作,我在处理中翻转了它。然后,我将结果CGImage
渲染成UIView
. 由于CGImage
实际上确实有它的坐标系翻转,一切似乎都很好,直到我尝试对图像数据做其他事情并且那些翻转出来。原来问题一直是CGImage
。
推荐阅读
- wcf - 在 WCF REST Web 服务上启用 HTTPS
- javascript - 打印机配置3英寸宽的纸张
- typescript - 错误:未捕获(承诺):错误:无法匹配任何路由。Angular 6 中的 URL 段
- android - Unity - iOS/Android 构建大小太高/太大,原因不明
- python - Spyder方法(Python)中的“a”,“c”,“f”是什么意思
- groovy - 带有闭包和空安全检查的 Groovy 集合排序导致异常
- javascript - 在 JavaScript 中将带小数的浮点数解析为 JSON 也为 1 为 1.00
- python - Python tkinter 按钮字体越来越像素化
- razor-pages - 在 asp-page 的 CSHTML 代码中使用 @local_variable
- c - 当你在 C 中调用隐式声明的函数时会发生什么?