iPhone: получить предварительный просмотр камеры - PullRequest
3 голосов
/ 23 августа 2009

Я хотел бы получить изображение, которое отображается на 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 ]

7 голосов
/ 07 октября 2009

Этот тоже работает довольно хорошо. Используйте его, когда открыт предварительный просмотр камеры:

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 голос
/ 24 августа 2009

Неофициальный звонок:

UIGetScreenImage()

, который вы объявляете над @implementation как:

extern CGImageRef UIGetScreenImage();

Может быть документированный способ сделать это в 3.1, но я не уверен. Если нет, пожалуйста, подайте Radar в Apple с просьбой сделать доступ к экрану каким-либо образом открытым для общественности !!!

Использует тот же AppleID, который вы используете для входа на портал разработки iPhone.

Обновление: этот вызов еще не задокументирован, но Apple явно дала согласие на использование его с приложениями App Store.

0 голосов
/ 23 августа 2009

по крайней мере сейчас, нет способа сделать это. (конечно, нет официального документированного способа, и, насколько я знаю, никто не нашел и неофициального способа.)

данные предварительного просмотра камеры обрабатываются ОС некоторым способом, который обходит обычные графические методы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...