Получить разрешение камеры iPhone? - PullRequest
3 голосов
/ 28 октября 2009

Есть ли способ получить разрешение камеры iPhone?Очевидно, что 3G имеет 1200x1600, а 3GS имеет 1500x2000, но как мне получить эти значения из моего кода (не делая снимок).Мне нужно, чтобы они произвели некоторое аффинное преобразование в предварительный просмотр камеры.

Я мог бы определить, является ли 3G или 3GS жестким кодированием этих значений, но это только последнее средство.

Ответы [ 6 ]

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

Я думаю, что ваше "последнее средство" - хорошее решение.

Что не так с определением модели? Аппаратное обеспечение не изменится ни для одной из этих моделей. Единственное, что вас может беспокоить, это 3GSX-R или еще что-нибудь с 16-мегапиксельной камерой. В этот момент вам, вероятно, в любом случае придется обновить приложение и просто добавить другое значение в список.

Я голосую за обнаружение модели.

3 голосов
/ 15 августа 2012

Сообщение старое, но оно почти первое в Google, и оно не имеет правильного ответа, поэтому вот еще один вариант:

Решение для iOS от 4.x до 7.x

Это все с точки зрения AV Foundation рамки

После настройки и запуска AVCaptureSession размеры видео можно найти внутри [[[session.inputs.lastObject] ports].lastObject formatDescription] переменная

Вот примерный код:

AVCaptureSession* session = ...;
AVCaptureDevice *videoCaptureDevice = ...;
AVCaptureDeviceInput *videoInput = ...;

[session beginConfiguration];
if ([session canAddInput:videoInput]) {[session addInput:videoInput];}
[session commitConfiguration];
[session startRunning];

//this is the clue
AVCaptureInputPort *port = videoInput.ports.lastObject;
if ([port mediaType] == AVMediaTypeVideo)
{
    videoDimensions = CMVideoFormatDescriptionGetDimensions([port formatDescription]);
}

Решение для iOS8

Apple снова все изменила: теперь вы должны подписаться на AVCaptureInputPortFormatDescriptionDidChangeNotification

Вот образец:

-(void)initSession
{
    AVCaptureSession* session = ...;
    AVCaptureDevice *videoCaptureDevice = ...;
    AVCaptureDeviceInput *videoInput = ...;

    [session beginConfiguration];
    if ([session canAddInput:videoInput]) {[session addInput:videoInput];}
    [session commitConfiguration];
    [session startRunning];

    [[NSNotificationCenter defaultCenter] addObserver:self
            selector:@selector(avCaptureInputPortFormatDescriptionDidChangeNotification:)
            name:@"AVCaptureInputPortFormatDescriptionDidChangeNotification"
            object:nil];
}

-(void)avCaptureInputPortFormatDescriptionDidChangeNotification:(NSNotification *)notification
{
    AVCaptureInputPort *port = [videoInput.ports objectAtIndex:0];
    CMFormatDescriptionRef formatDescription = port.formatDescription;
    if (formatDescription) {
        videoDimensions = CMVideoFormatDescriptionGetDimensions(formatDescription);
    }

}
2 голосов
/ 19 ноября 2009

Вам действительно нужно знать разрешение изображения для настройки аффинного преобразования? Поскольку представление предварительно настроено на ширину экрана, вы можете изменить преобразование в зависимости от того, какую часть экрана вы хотите занять, т. Е. Если вы хотите, чтобы предварительный просмотр имел ширину 160 пикселей, просто уменьшите его. 50% от значения по умолчанию. Сейчас я делаю это в приложении, и оно работает на новых и старых iPhone ...

0 голосов
/ 29 октября 2009

Почему ты не хочешь сфотографировать? Используйте метод UIImagePickerController takePicture , инструктируя пользователя, что это необходимый шаг калибровки. После этого посмотрите на разрешение изображения, постоянно сохраняйте значение и удаляйте снимок, который вы сделали. После этого вы получите разрешение и сможете применить к нему преобразование.

0 голосов
/ 28 октября 2009

Хотя я думаю, что ответ Сникера определенно правильный. Я думал, что выложу это для развлечения.

Вы можете просмотреть сохраненный фотоальбом пользователя на iPhone (я делаю смелое предположение, что это можно сделать программно на iPhone без ограничений !!), делая предположение, что фотографии на телефоне в основном были сделаны с помощью телефон сам, вы можете определить среднее разрешение фотографии и сделать снимок.

0 голосов
/ 28 октября 2009

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

...