iPhone: получить предварительный просмотр камеры

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

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

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

Решение Вопроса

когда открыт предварительный просмотр камеры:

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);  

Проблема, которую я не сделалЯ все еще не нашел решения, как можно получить изображение с камеры очень быстро без каких-либо наложений?

 Seeker06 нояб. 2013 г., 11:56
: Я использую твой код, но все же я получил предварительный просмотр камеры как черный

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

UIGetScreenImage()

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

extern CGImageRef UIGetScreenImage();

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

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

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

 Kendall Helmstetter Gelner07 февр. 2010 г., 22:29
Я неНе думаю, что вы можете использовать его из потока, я просто вызывал его всякий раз, когда хотел получить содержимое экрана - вы можете взять полученное изображение и отправить его в фоновый поток для обработки.
 AP.07 февр. 2010 г., 10:57
Как вы используете UIGetScreenImage? в теме?

Ваш ответ на вопрос