2014-01-31 48 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缓冲区,如果可能的话不经处理。 –

相关问题