Swift 一个像素对一个像素的相机馈送尺寸

Swift 一个像素对一个像素的相机馈送尺寸,swift,avfoundation,Swift,Avfoundation,这是一个相当奇怪的要求,但我正在寻找建立一个应用程序,有一个现场摄像机饲料占据整个屏幕。但是,不是显示正常分辨率,而是显示一种颜色。特别是,我想采用通常情况下屏幕中间像素的颜色,并使其占据整个屏幕。这需要现场快速完成 我试图制作一个函数,将capturesession保存为uiimage,然后从中获取像素数据,但是,它的实时速度很慢。有什么建议吗?假设您有AVCaptureSession设置。您需要设置AVCaptureVideoDataOutput,然后设置其示例缓冲区委托。委托类应该重写函数

这是一个相当奇怪的要求,但我正在寻找建立一个应用程序,有一个现场摄像机饲料占据整个屏幕。但是,不是显示正常分辨率,而是显示一种颜色。特别是,我想采用通常情况下屏幕中间像素的颜色,并使其占据整个屏幕。这需要现场快速完成


我试图制作一个函数,将capturesession保存为uiimage,然后从中获取像素数据,但是,它的实时速度很慢。有什么建议吗?

假设您有AVCaptureSession设置。您需要设置AVCaptureVideoDataOutput,然后设置其示例缓冲区委托。委托类应该重写函数captureOutput(AVCaptureOutput!、CMSampleBuffer!、AVCaptureConnection!)。在该功能中,您可以访问像素缓冲区以对中心点进行采样。你可以按下面的方法做。我把中心点的实际采样留给你了

class MyClass : NSObject, AVCaptureVideoDataOutputSampleBufferDelegate {

    func addVideoOutput() {
        // Add video data output.
        if session.canAddOutput(videoDataOutput)
        {
            videoDataOutput.setSampleBufferDelegate(self, queue: sessionQueue)
            videoDataOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey as NSString:Int(kCVPixelFormatType_32BGRA)]

            videoDataOutput.alwaysDiscardsLateVideoFrames = true
            session.addOutput(videoDataOutput)
        }
    }

    // AVCaptureVideoDataOutputSampleBufferDelegate
    func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) {
        if let buffer = CMSampleBufferGetImageBuffer(sampleBuffer) {
            process(pixelBuffer: buffer)
        }
    }
    func process(pixelBuffer: CVPixelBuffer) {
        let sourceRowBytes = CVPixelBufferGetBytesPerRow( pixelBuffer );
        let width = CVPixelBufferGetWidth( pixelBuffer );
        let height = CVPixelBufferGetHeight( pixelBuffer );

        let rt = CVPixelBufferLockBaseAddress( pixelBuffer, .readOnly );
        if (rt == kCVReturnSuccess) {
            ... 
            Do your processing of the pixeldata here
            ...
            CVPixelBufferUnlockBaseAddress(pixelBuffer, .readOnly)
        }
    }

    private let session = AVCaptureSession()
    private let sessionQueue = DispatchQueue(label: "session queue", attributes: [], target: nil) // Communicate with the session     
    private let videoDataOutput = AVCaptureVideoDataOutput()
}
我只使用相机应用程序本身来捕捉图像,但也许你可以(1)计算出你需要的精确像素,(2)使用相机设备实时捕捉图像-如果可能的话,通过类似的方式()我认为你可以,然后(3)使用CoreGraphics或CoreImage将其绘制为“图像”-您可以轻松将其转换为UIImage。