Проблемы определения правильной ориентации с использованием ALAssetOrientation и UIImageOrientation - PullRequest
3 голосов
/ 23 марта 2012

У меня проблемы с правильной ориентацией изображений на iPhone. Я получаю доступ к изображениям с помощью классов AssetLibrary.

Все, что я хочу сделать, это правильно ориентировать изображения для отображения, к сожалению, для некоторых изображений, снятых в портретном режиме, они имеют ориентацию, которая не имеет смысла.

В блоке, который вызывается платформой, я выполняю следующие вызовы для изображения, сделанного камерой iPhone, когда оно было ориентировано вверх:

        ALAssetRepresentation   *representation = [myasset defaultRepresentation];
        ALAssetOrientation      orient          = [representation orientation];
        ALAssetOrientation      alorient = [[myasset valueForProperty:@"ALAssetOrientation"] intValue];
        UIImage                 *timg           = [[UIImage alloc] initWithCGImage:[representation fullScreenImage]];
        UIImageOrientation      imgorient       = [timg imageOrientation];

THe variable orient = ALAssetOrientationRight.
The variable alorient = ALAssetOrientationUp.
The variable imgorient = UIImageOrientationUp

Я использовал значение ориентации, чтобы повернуть изображение так, чтобы оно отображалось «вверх». К сожалению, если у меня есть изображение, которое снято в ландшафтном режиме, тот же код не работает, потому что ориентации неверны.

Я пытался создать экземпляр timg, используя scale: direction: overload, используя orient для параметра ориентации, все, что он делает, это инициализирует изображение, устанавливая ориентацию, но неправильно поворачивает изображение.

Это кажется недетерминированным, почему эти вызовы возвращают разные результаты:

ALAssetOrientation      orient   = [representation orientation];
ALAssetOrientation      alorient = [[myasset valueForProperty:@"ALAssetOrientation"] intValue];

Ваша помощь будет принята с благодарностью.

Спасибо, Будет

1 Ответ

0 голосов
/ 29 января 2013

Проблема в том, что вы использовали неправильное имя свойства.

В вашем коде:

[[myasset valueForProperty:@"ALAssetOrientation"] intValue];

должно быть:

[[myasset valueForProperty:@"ALAssetPropertyOrientation"] intValue];

Согласнодокументация из -[ALAsset valueForProperty:]

If property is not a valid key, returns ALErrorInvalidProperty.

Ваш код пытается привести ALErrorInvalidProperty к int, что приводит к 0.По совпадению ALAssetOrientationUp имеет значение 0, поэтому ваша переменная alorient всегда будет иметь значение ALAssetOrientationUp.

...