3

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

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

В блоке, который называется каркасом, я делаю следующие призывы к картине, которая была взята с помощью камеры iPhone в то время как он был ориентирован «Up»:

 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 с использованием шкалы: ориентация: перегрузка с использованием ориентации для параметра ориентации, все, что она делает, это инициализировать настройку изображения, но неправильно поворачивает изображение.

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

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

Ваша помощь будет весьма признателен.

Спасибо, Will

+0

Серьезно, никто не прокомментировал это? !!? – willmapp

ответ

0

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

В коде:

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

должно быть:

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

Согласно documentation из -[ALAsset valueForProperty:]

If property is not a valid key, returns ALErrorInvalidProperty. 

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