【问题标题】:Adobe AIR CameraUI photo orientationAdobe AIR CameraUI 照片方向
【发布时间】:2016-02-26 16:40:51
【问题描述】:

在尝试使用 CameraUI 类拍照时,我在某些 Android 设备上遇到了一些问题。

我的 AIR 应用是仅纵向的 autoOrients = false,但由于某种原因,在纵向拍摄照片时,图像将返回为向右旋转 90 度。

这仅在三星 S6 上发生,但不会在例如 HTC M8 上发生。

是否有解决此问题的方法,或者这只是 Adob​​e 错误库中的永恒错误之一?

使用 ANE 是解决此问题的最佳选择吗?

【问题讨论】:

  • S6 还是新的。我怀疑永远存在一个相关的错误。您确定三星不只是倾斜他们的 S6 相机硬件并且您的代码根本没有补偿这种可能性吗?比较 HTC M8 的肖像和 S6 的肖像的 EXIF。 “方向代码”是否匹配?还是 90 度旋转会改变这个数字?无论如何,您的 AS3 代码应该检查字节的方向,如果不正确,请执行一些函数来旋转图像像素。

标签: android actionscript-3 air


【解决方案1】:

虽然这很烦人,但它实际上是预期的功能。我使用了 here 描述的 ExifReader 类来确定方向,然后在将文件保存到磁盘之前将其旋转到正确的方向。

【讨论】:

    【解决方案2】:

    Android 的相机图像内置了 GPS 位置、方向等信息,以及名为 Exchangeable Image File (Exif) 的更多信息。 当您捕获图像时,它将与这些信息一起保存在 jpg 文件中,但图像可能会以意外的方向保存在驱动器上。

    所以,这是解决方案:

    1- 将 Exif 编码器库添加到您的项目中,如下所示: https://github.com/cantrell/ExifExample 2-使用类似这个函数来控制图像方向加载图像字节后

           /**1: normal<br>
            3 rotated 180 degrees (upside down)<br>
            6: rotated 90 degrees CW<br>
            8: rotated 90 degrees CCW<br>
            9: unknown<br>
            */
        public static function getOrientation(ImageBytes:ByteArray):uint
        {
            var exif:ExifInfo = new ExifInfo(ImageBytes);
            if(exif.ifds != null)
            {
                var ifd:IFD = exif.ifds.primary ;
                var str:String = "";
                for (var entry:String in ifd) {
                    if(entry == "Orientation"){
                        str = ifd[entry];
                        break;
                    }
                }
                return uint(str);
            }
            else
            {
                return 9 ;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2012-05-22
      • 1970-01-01
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 2010-09-15
      • 2012-05-12
      • 1970-01-01
      相关资源
      最近更新 更多