2009-03-02 7 views
5

Когда я использую метод [view.layer renderInContext:UIGraphicsGetCurrentContext()]; для поворота представлений в изображения на мозаичном виде камеры iPhone, все, что я получаю, это элементы управления с черным, где был предварительный просмотр камеры.Получение представления изображения в предварительном просмотре камеры в UIImagePickerController

У кого-нибудь есть решение для этого? Скорость не является проблемой.

ответ

0

К сожалению, это невозможно. Для производительности iPhone использует некоторую форму прямого рендеринга для предварительного просмотра камеры непосредственно на экране, а не как часть поверхности UIView. Таким образом, когда вы «захватываете» просмотр камеры, вы получите только элементы UIView, а не изображение предварительного просмотра.

(FWIW это похоже на причины, почему его трудно Screengrab некоторое кино программное обеспечение на Windows/Mac)

+0

Я думаю, что это должно быть возможно, так как в AppStore есть приложения, которые явно делают скриншоты окна предварительного просмотра камеры (например, QuadCam). Если вы вызываете UIGetScreenImage(), вы действительно получаете изображение предварительного просмотра камеры, но это частная функция API и не должна использоваться. –

+0

Да, UIGetScreenImage захватывает текущий фреймбуфер. renderInContext рисует иерархию представлений указанного представления в контексте. Это концептуально разные вещи. –

+0

Да, я это понимаю. Причина, по которой я спрашиваю, - это кто-то по имени «Роландо» опубликовал, что у него есть третий способ сохранить предварительный просмотр камеры в качестве изображения, но утверждает, что он не может разглашать информацию из-за NDA. http://blog.airsource.co.uk/index.php/2008/11/11/views-of-uiimagepickercontroller/ –

4

Не возможно с документированным API, но возможно. Найти «PLCameraView» вид в подобозрении камеры, а затем вызвать

CGImageRef img = (CGImageRef)[foundCameraView imageRef]; 

Это будет возвращать ссылку на изображение, которое камера держит.

+0

Отравит ли Apple приложение, которое это делает? – 2011-06-03 14:50:09

2

Вы можете сделать это с новым AVFoundation вещи в прошивкой 4.0.

Вы должны иметь возможность вызвать UIGetScreenImage() (возвращает UIImage), чтобы получить текущий захват всего экрана, включая предварительный просмотр. Так работали все приложения для штрих-кодов. Но, предположительно, Apple не разрешает это сейчас и только разрешает технику AVFoundation, которая работает только под 4.0.

Все дело в том, что UIGetScreenImage() не является частью документированного API, но Apple сделала конкретное исключение для его использования. Это не похоже на то, что они тянут текущие приложения, но они не разрешают новые материалы (или обновления), которые используют более старый метод.

Есть несколько лоббистов от имени многих людей, чтобы убедить Apple, чтобы разработчики приложений использовали старую технику только для iOS 3.x, поэтому отправьте электронное письмо на отношения с разработчиками, если вы хотите его использовать.

Смежные вопросы