2014-01-31 45 views
5

我想在最大圖像傳感器捕獲分辨率爲8MP的iOS設備中以5MP分辨率捕獲圖像。如何在iPhone設備上使用800萬像素攝像頭捕捉500萬像素圖像?

在Avfoundations AVCaptureSessionPresetPhoto提供的預設讓 - 3264X2448 - 800萬像素的分辨率 VCaptureSessionPresetHigh給 - 1920×1080 - 2 MP分辨率

有什麼辦法/解決方法直接捕捉500萬像素,而不是捕捉800萬像素,然後縮減?

回答

2

iOS給相機提供的輸出分辨率非常有限。

您剛纔提到的最大尺寸是8MP,下一個預設會降低到1080p或〜200萬像素。預計看起來是按照應用程序的要求縮小/裁剪圖像,但是SDK不提供單個API來獲取所需的分辨率或輸出圖像。

希望這會有所幫助。

2

AVCaptureSessionPreset只給出常量分辨率(您可以看到API參考)。如果你想保存在自定義分辨率的圖像,你可以在這裏找到Save image with custom resolution

+0

您的解決方案非常有幫助。以自定義分辨率從屏幕獲取UIImage是很有用的。我試圖以YUV420SP格式捕捉圖像,有沒有什麼辦法可以在自定義分辨率下捕捉YUV420。 –

+0

如果我正確地進行了簡要說明,在您指出的解決方案中,我們正在使用Core圖形API調整UIImage的大小,以獲得自定義分辨率。如果我的理解錯誤,請糾正我。 –

1

你爲什麼不拍攝的圖像與800萬像素的攝像頭,然後保存圖像使用前改變其大小WRT 500萬像素的分辨率以下方法

+ (UIImage*)imageWithImage:(UIImage*)image 
      scaledToSize:(CGSize)newSize 
{ 
UIGraphicsBeginImageContext(newSize); 
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; 
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return newImage; 
} 

在保存捕獲的圖像之前,在imagePickerDidFinishMediaWithInfoMethod中調用上述方法。上述方法將返回一個尺寸改變的Uiimage(你必須提供CGSize)。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    UIImage * tempImage =[info objectForKey:UIImagePickerControllerOriginalImage]; 
    CGSize mSize; 
    mSize  = CGSizeMake(your width and height as per 5MP mode); 
    tempImage = [ViewController imageWithImage:tempImage scaledToSize:mSize]; 
    // use this temp img as it would be in dimensions of 5MP image. 
} 
+0

謝謝@Rana。你的答案是有幫助的,但我試圖避免調整大小。而且我正在考慮直接獲取YUV/RGB緩衝區,如果可能的話不經處理。 –

相關問題