Droid 设备 - 不会旋转从相机拍摄的图像? (相机.参数)

Posted

技术标签:

【中文标题】Droid 设备 - 不会旋转从相机拍摄的图像? (相机.参数)【英文标题】:Droid device - won't rotate image captured from camera? (Camera.Parameters) 【发布时间】:2010-12-28 09:48:56 【问题描述】:

我正在使用此相机代码要求相机旋转捕获的图像数据:

Camera.Parameters params = camera.getParameters();
params.set("rotation", 90);
camera.setParameters(params);

这似乎适用于所有手机,除了 Droid。有没有其他人看到这个?图像数据始终是横向的,但是,Droid 上的本机相机应用程序可以生成纵向图像。

我想知道 Droid 是否只会尊重新的 Camera.Parameters.setRotation() 方法,但这似乎只在 API 级别 5 中可用?

【问题讨论】:

【参考方案1】:

setRotation 在 Nexus One 上似乎也不适用于我,但我确实按照 android 相机应用程序本身的示例进行了图像旋转。 源代码可在此处获得: https://android.googlesource.com/platform/packages/apps/Camera

从 Camera.java 开始,但您还将查看 ImageManager.java、Util.java 和其他文件。

基本思想是,您可以在拍摄照片时聆听方向变化并捕捉方向。然后,当您在回调中获取图片字节时,您操作位图,对位图进行旋转。然后将旋转的位图转换回 jpeg。完成后,您将不得不从相机应用程序中复制大量代码来进行旋转。

【讨论】:

【参考方案2】:

旋转可能只是存储在 jpeg exif 标头中,如 setRotation 文档中所述。在 Droid 上,情况确实如此。您可以使用 jhead 等 jpeg 标头读取工具来验证这一点。您也可以使用ExifInterface API 来读取程序中的方向标签。

【讨论】:

尝试使用 API for exif 但无法保存更改。我根本无法在相机照片上进行旋转。很烦人。【参考方案3】:

Droid 运行 Android 2.0(嗯,现在是 2.0.1),分别是 API 级别 5 和 6。

因此,Droid 很可能只尊重(更明智的)2.0+ API 进行旋转。

但是,我猜您担心的是跨一系列设备类型和操作系统版本的兼容性,所以我想您必须在检测到操作系统版本后通过反射调用 2.0+ API(使用android.os.Build.VERSION_CODES)。

【讨论】:

哦,哇,这听起来不太好——我是否应该开始使用 2.0 API(看起来像级别 6),如果我看到 API

以上是关于Droid 设备 - 不会旋转从相机拍摄的图像? (相机.参数)的主要内容,如果未能解决你的问题,请参考以下文章

相机预览处于纵向模式,但拍摄的图像已旋转

保存用相机和旋转手机拍摄的图像时,Android 应用程序死机

Android将图片旋转90度(由相机拍摄)[重复]

android中三星设备上的相机捕捉方向

仅在三星设备中从相机单击时图像会旋转

iPhone OS 图像/照片大小调整工具更改 EXIF 方向数据