6

我试图从相机中获得尽可能好的图像,但只能找到示例captureStillImageAsynchronouslyFromConnection然后直接转到:

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)}
}

还有其他方法可以拍摄全分辨率照片并获取原始数据吗?

4

2 回答 2

10

您需要使用不同的像素格式设置 outputSettings。例如,如果您想要 32 位 BGRA,您可以设置:

NSDictionary *outputSettings = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA], (id)kCVPixelBufferPixelFormatTypeKey, nil];

https://developer.apple.com/library/mac/#documentation/AVFoundation/Reference/AVCaptureStillImageOutput_Class/Reference/Reference.html,“推荐”像素格式为:

  • kCMVideoCodecType_JPEG
  • kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
  • kCVPixelFormatType_32BGRA

当然,如果你不使用JPEG输出,你不能使用jpegStillImageNSDataRepresentation:,但这里有一个例子: how to convert a CVImageBufferRef to UIImage

于 2012-07-26T01:06:14.497 回答
0

只需更改连接的输出设置:

outputSettings 输出的压缩设置。

@property(nonatomic, copy) NSDictionary *outputSettings

您可以使用 检索受支持值的 NSDictionary

availableImageDataCodecTypes 可以在 outputSettings 中指定的支持的图像编解码器格式。(只读)

@property(nonatomic, readonly) NSArray *availableImageDataCodecTypes
于 2012-07-20T01:34:41.023 回答