Android 1.6相机旋转问题?

3

我在安卓开发论坛上发布了这个问题,但也想在这里求助。

我们应用中的一个功能是拍照。在1.5和1.6版本中,预览图片在屏幕上显示的方向是正确的,但保存后,jpg格式的照片会旋转90度。

虽然我可以实时旋转显示图片,并且在保存后再次保存也能解决这个问题,但我的问题是:我希望在拍照时就能正确地保存。

在1.5版本编译时,我的应用程序运行良好。在1.6版本中,由于图像大小的原因,我的应用程序出现了一些内存问题,这很奇怪,因为拍照时图像的大小会增加,通过使用bitmapfactory matrix来调整它们的大小,我似乎已经解决了重新显示这些图像的问题。但现在我的相机将所有东西都旋转了90度。看起来我的surfaceChanged覆盖无效了,而我在那里设置了旋转角度为90度(我不记得为什么要这样做了,那是10个月前的事情!)。我尝试过将摄像头参数paramters旋转90度、0度,但似乎没有任何作用...你有什么想法吗?

1个回答

6

相机驱动程序不知道设备的方向。在1.5和1.6中,您需要在调用takePicture()之前调用parameters.set("rotation", degree)来告诉驱动程序有关旋转的信息。在2.0中,有一个新的API setRotation(见下文)。请注意,一些设备会自动旋转整个图片,而另一些则仅在EXIF标头中设置方向。

http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setRotation(int)

设置设备的方向(以度为单位)。例如,假设设备的自然位置是横屏。如果用户在2048x1536分辨率下使用横屏模式拍照,则应将旋转设置为0。如果用户将手机顺时针旋转90度,则应将旋转设置为90。应用程序可以使用OrientationEventListener来设置此参数。相机驱动程序可以在不旋转图片的情况下在EXIF头中设置方向。或者驱动程序可能会旋转图片和EXIF缩略图。如果旋转了Jpeg图片,则EXIF头中的方向将丢失或为1(行#0为顶部,列#0为左侧)。
参数
rotation 设备的方向,以度为单位。旋转只能为0、90、180或270。

我在2.1上尝试过这个,但它从来没有保存到图像。我最初使用Images.Media.insertImage()保存文件。在任何其他移动平台上,我从未遇到比在Android上更多的问题。这对我来说是最令人沮丧的过程。 - Brenden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接