2017-03-24 24 views
0

sampleBuffer를 UIImage로 변환하고 colorspaceGray가있는 이미지 뷰에 표시하려고합니다. 그러나 다음 이미지로 표시됩니다. 이 질문에 무엇이 잘못 되었습니까? CMSampleBuffer를 어떻게 변환 할 수 있습니까? CMSampleBuffer는 당신에게 당신이 다음 직접 그레이 스케일 이미지를 생성되는 RGBA 데이터를주고있다처럼 It is a gray version of a red colored imageCMSampleBuffer를 UIImage로 변환

답변

5

변환은 간단하다 :

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) { 

     let imageBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)! 

     let ciimage : CIImage = CIImage(cvPixelBuffer: imageBuffer) 

     let image : UIImage = self.convert(cmage: ciimage) 

    } 

// Convert CIImage to CGImage 
    func convert(cmage:CIImage) -> UIImage 
    { 
     let context:CIContext = CIContext.init(options: nil) 
     let cgImage:CGImage = context.createCGImage(cmage, from: cmage.extent)! 
     let image:UIImage = UIImage.init(cgImage: cgImage) 
     return image 
    } 
+0

감사 합니다만, UIImage를 다시 CMSampleBuffer로 변환하는 방법은 무엇입니까? – user924

1

보인다. 각각의 픽셀에 대해 gray = (pixel.red+pixel.green+pixel.blue)/3과 같은 새로운 버퍼를 생성해야합니다. 또는받은 데이터에서 일반 RGBA 이미지를 만든 다음 회색 음영으로 변환해야합니다.

하지만 코드에서 전혀 전환이 발생하지 않습니다. 어떤 종류의 데이터가 있더라도 CVPixelBufferGetBaseAddress을 사용하여 버퍼에 원시 포인터를 가져 왔습니다. 그리고 수신 된 데이터가 그레이 스케일이라고 가정하는 이미지를 생성 할 때 같은 포인터를 전달합니다.

+0

나는 그것이 형식을 캡처 출력 예상대로되도록 촬영의 출력 형식을 지정할 수도 있습니다 생각합니다. –

+0

데이터가 이미 회색조 인 경우이 스트립이 왜오고 있습니까? 단순한 회색 이미지가 아닌 이유는 무엇입니까? – mumu

+0

@Matic 나는 이것보다 먼저 첫 번째 방법을 시도했다. 그러나 컨텍스트에서 이미지를 만드는 동안 오류가 발생하여이 오류가 발생합니다. 복사 읽기 전용 : vm_copy 실패 : 상태 1 – mumu