3

我在 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

我使用 orient 值来旋转图像,使其看起来“向上”。不幸的是,如果我有一张以横向模式拍摄的图像,则相同的代码将不起作用,因为方向不正确。

我尝试使用 scale:orientation: 重载使用 orient 作为方向参数来实例化 timg,它所做的只是初始化设置方向的图像,但不正确地旋转图像。

这似乎是不确定的,这些调用为什么会返回不同的结果:

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

对你的帮助表示感谢。

谢谢,威尔

4

1 回答 1

0

The problem is that you used the wrong property name.

In your code:

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

should be:

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

According to the documentation of -[ALAsset valueForProperty:]

If property is not a valid key, returns ALErrorInvalidProperty.

Your code try to cast ALErrorInvalidProperty to an int, which result in 0. By coincidence ALAssetOrientationUp have the value of 0 that's why your alorient variable will always evaluate to ALAssetOrientationUp.

于 2013-01-29T08:22:20.943 回答