获取AVCaptureSession或AVCaptureVideoPreviewLayer的像素颜色
问题描述:
在我的应用程序的设计中,我希望将实时相机馈送周围的框架更改为实时相机中中间像素的确切颜色。为了我的应用程序的目的,这很重要,而不仅仅是一个简单的颜色方案。获取AVCaptureSession或AVCaptureVideoPreviewLayer的像素颜色
我有遍历UIImage甚至UIView的字节的代码,并找到特定坐标的像素颜色。但是,这似乎不适用于AVCaptureSession或AVCaptureVideoPreviewLayer。
我拥有的最佳解决方法是在后台运行一个队列,每隔0.1秒本质上就会在屏幕外画一幅保存的图像,并以此方式查找像素颜色。我知道这不是最好的办法!并想知道是否有人可以将我的资源指向有用的资源。
答
您可以尝试从AVFoundation
获取相机帧并分析帧图像缓冲区以了解颜色。
假设你已经有AVCaptureVideoDataOutput
设置,那么你可以简单地使用下面的AVCaptureVideoDataOutputSampleBufferDelegate
方法来获取相机帧。
optional func captureOutput(_ captureOutput: AVCaptureOutput!,
didOutputSampleBuffer sampleBuffer: CMSampleBuffer!,
from connection: AVCaptureConnection!)
请注意,这个代表只会给我们图像缓冲区a.k.a CMSampleBuffer
。所以我们需要将这个缓冲区转换成UIImage
并在你的情况下找到像素颜色。
下面是一些可以帮助你的答案。