Получить разрешение камеры iPhone?
Есть ли способ получить разрешение камеры iPhone? Очевидно, что 3G имеет 1200x1600, а 3GS имеет 1500x2000, но как мне получить эти значения из моего кода (не делая снимок). Мне нужно, чтобы они сделали аффинное преобразование в предварительный просмотр камеры.
Я мог бы определить, является ли 3G или 3GS жестким кодом для этих значений, но это только последнее средство.
6 ответов
Я думаю, что ваше "последнее средство" является хорошим решением.
Что не так с определением модели? Аппаратное обеспечение не изменится ни для одной из этих моделей. Единственное, что вас может беспокоить, это 3GSX-R или еще что-нибудь с 16-мегапиксельной камерой. В этот момент вам, вероятно, все равно придется обновить свое приложение и просто добавить другое значение в список.
Я голосую за определение модели.
Сообщение старое, но оно почти первое в 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);
}
}
Вам действительно нужно знать разрешение изображения для настройки аффинного преобразования? Поскольку представление предварительно настроено на ширину экрана, вы можете изменить преобразование в зависимости от того, какую часть экрана вы хотите занять, т. Е. Если вы хотите, чтобы предварительный просмотр имел ширину 160 пикселей, просто уменьшите его. 50% от значения по умолчанию. Сейчас я делаю это в приложении, и оно работает на новых и старых iPhone...
Хотя я думаю, что ответ Сникера определенно правильный. Я думал, что выложу это для развлечения.
Вы можете просмотреть сохраненный пользователем фотоальбом на iPhone (я делаю смелое предположение, что это можно сделать программно на iPhone без ограничений!), Исходя из предположения, что фотографии на телефоне в основном были сделаны с телефона, который он сам Вы могли бы тогда определить, какое среднее разрешение фото, и сделать это.
Поскольку Apple не позволяет вам напрямую общаться с аппаратным обеспечением, выбор законного продукта в App Store невелик.
Почему ты не хочешь сфотографировать? Используйте метод takePicture UIImagePickerController, инструктируя пользователя, что это необходимый шаг калибровки. После этого посмотрите на разрешение изображения, сохраните значение и удалите снимок, который вы сделали. После этого у вас будет разрешение и вы сможете применить преобразование к нему.