我试图从相机中获得尽可能好的图像,但只能找到captureStill
ImageAsynchronouslyFromConnection的示例,然后直接进入:
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer]; UIImage *image = [[UIImage alloc] initWithData:imageData];
JPEG是有损的,有没有什么方法可以将数据作为PNG,甚至只是RGBA(BGRA,你有什么用?). AVCaptureStillImageOutput似乎没有任何其他NSData *方法….
实际上看着CMSampleBufferRef,它似乎已经锁定为JPEG~
formatDescription = <CMVideoFormatDescription 0xfe5e1f0 [0x3e5ac650]> { mediaType:'vide' mediaSubType:'jpeg' mediaSpecific: { codecType: 'jpeg' dimensions: 2592 x 1936 } extensions: {(null)} }
解决方法
您需要使用不同的像素格式设置outputSettings.例如,如果您想要32位BGRA,您可以设置:
NSDictionary *outputSettings = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA],(id)kCVPixelBufferPixelFormatTypeKey,nil];
> kCMVideoCodecType_JPEG
> kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
> kCVPixelFormatType_32BGRA
当然,如果您不使用JPEG输出,则不能使用jpegStillImageNSDataRepresentation:,但这里有一个示例:
how to convert a CVImageBufferRef to UIImage