iPhone:获取相机预览

时间:2009-08-23 07:18:01

标签: iphone cocoa-touch camera uiimagepickercontroller

当用户使用相机时,我想获取UIImagePickerController上显示的图像。当我得到我想要处理图像和显示而不是常规的相机视图。

但问题是当我想要获取相机视图时,图像只是一个黑色矩形。

这是我的代码:

UIView *cameraView = [[[[[[imagePicker.view subviews] objectAtIndex:0]
                         subviews] objectAtIndex: 0]
                       subviews] objectAtIndex: 0];

UIGraphicsBeginImageContext( CGSizeMake(320, 427) );
[cameraView.layer renderInContext: UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

imageToDisplay.image = [PixelProcessing processImage: viewImage];   //In this case the image is black
//imageToDisplay.image = viewImage; //In this case the image is black too
//imageToDisplay.image = [UIImage imageNamed: @"icon.png"];     //In this case image is being displayed properly

我做错了什么?

感谢。

3 个答案:

答案 0 :(得分:7)

这个也很好用。打开相机预览时使用它:

UIImage *viewImage = [[(id)objc_getClass("PLCameraController") 
                      performSelector:@selector(sharedInstance)] 
                      performSelector:@selector(_createPreviewImage)];

但据我发现,它带来的结果与以下采用当前屏幕截图的解决方案相同:

extern CGImageRef UIGetScreenImage();

CGImageRef cgoriginal = UIGetScreenImage();
CGImageRef cgimg = CGImageCreateWithImageInRect(cgoriginal, rect);            
UIImage *viewImage = [UIImage imageWithCGImage:cgimg];    
CGImageRelease(cgoriginal);                
CGImageRelease(cgimg);  

我还没有找到修复的问题是,如何在没有任何叠加的情况下快速获取相机图像?

答案 1 :(得分:1)

非正式的电话是:

UIGetScreenImage()

在@implementation上面声明为:

extern CGImageRef UIGetScreenImage();

3.1中可能有记录的方法可以做到这一点,但我不确定。如果没有,请向Apple提出Radar,要求他们公开进行某种屏幕抓取!

使用您使用。

登录iPhone开发门户的相同AppleID

更新:此调用尚未记录,但Apple明确表示可以将其与App Store应用程序一起使用。

答案 2 :(得分:0)

至少现在,没有办法做到这一点。 (当然没有官方记录的方式,据我所知,也没有人想出非正式的方式。)

操作系统以某种方式绘制了相机预览数据,绕过了普通的图形方法。