2012-07-20 86 views
6

我試圖從相機獲得良好的圖像成爲可能,但只能找到例子是captureStillImageAsynchronouslyFromConnection,然後直奔:captureStillImageAsynchronouslyFromConnection沒有JPG中介

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

有一些其他的方式,採取一完整的圖片並獲取原始數據?

+0

那麼你是如何最終獲取PNG數據的?你只是使用kCVPixelFormatType_32BGRA而不是kCMVideoCodecType_JPEG? – Crashalot 2016-03-30 07:43:56

+0

是的〜https://github.com/blindsightcorp/rawphoto-ios/blob/master/RawPhoto/CaptureSessionManager.m – 2016-03-30 19:41:12

+0

謝謝,但是第167行顯示你還在使用jpegStillImageNSDataRepresentation嗎?你如何轉換爲PNG? – Crashalot 2016-03-30 19:45:02

回答

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輸出ut,你不能使用jpegStillImageNSDataRepresentation:,但這裏有一個例子: how to convert a CVImageBufferRef to UIImage

+0

哇。儘管'availableImageDataCodecTypes'表示只有jpeg可用,我應該剛剛嘗試過。我想其他人不是編解碼器,所以這是有道理的。更快樂。謝謝! :) – 2012-07-26 01:13:09

+0

所以如果你想PNG而不是JPEG輸出,你使用kCVPixelFormatType_32BGRA,然後使用其中一個答案從CVImageBufferRef轉換爲UIImage?謝謝! – Crashalot 2016-03-30 08:18:55

0

只要改變你的連接輸出設置:

outputSettings 爲輸出的壓縮設置。

@property(nonatomic, copy) NSDictionary *outputSettings 

您可以

availableImageDataCodecTypes 可以在outputSettings指定支持的圖像編解碼器格式retreive支持的值的一個NSDictionary。 (只讀)

@property(nonatomic, readonly) NSArray *availableImageDataCodecTypes 
+0

新創建的AVCaptureStillImageOutput爲數組提供了一個用於availableImageDataCodecTypes的項:(jpeg)。這是否意味着我只是完全SOL而不是「全面的」? – 2012-07-20 06:22:59

相關問題