我想在最大图像传感器捕获分辨率为8MP的iOS设备中以5MP分辨率捕获图像。如何在iPhone设备上使用800万像素摄像头捕捉500万像素图像?
在Avfoundations AVCaptureSessionPresetPhoto提供的预设让 - 3264X2448 - 800万像素的分辨率 VCaptureSessionPresetHigh给 - 1920×1080 - 2 MP分辨率
有什么办法/解决方法直接捕捉500万像素,而不是捕捉800万像素,然后缩减?
我想在最大图像传感器捕获分辨率为8MP的iOS设备中以5MP分辨率捕获图像。如何在iPhone设备上使用800万像素摄像头捕捉500万像素图像?
在Avfoundations AVCaptureSessionPresetPhoto提供的预设让 - 3264X2448 - 800万像素的分辨率 VCaptureSessionPresetHigh给 - 1920×1080 - 2 MP分辨率
有什么办法/解决方法直接捕捉500万像素,而不是捕捉800万像素,然后缩减?
iOS给相机提供的输出分辨率非常有限。
您刚才提到的最大尺寸是8MP,下一个预设会降低到1080p或〜200万像素。预计看起来是按照应用程序的要求缩小/裁剪图像,但是SDK不提供单个API来获取所需的分辨率或输出图像。
希望这会有所帮助。
AVCaptureSessionPreset只给出常量分辨率(您可以看到API参考)。如果你想保存在自定义分辨率的图像,你可以在这里找到Save image with custom resolution
你为什么不拍摄的图像与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.
}
谢谢@Rana。你的答案是有帮助的,但我试图避免调整大小。而且我正在考虑直接获取YUV/RGB缓冲区,如果可能的话不经处理。 –
您的解决方案非常有帮助。以自定义分辨率从屏幕获取UIImage是很有用的。我试图以YUV420SP格式捕捉图像,有没有什么办法可以在自定义分辨率下捕捉YUV420。 –
如果我正确地进行了简要说明,在您指出的解决方案中,我们正在使用Core图形API调整UIImage的大小,以获得自定义分辨率。如果我的理解错误,请纠正我。 –