【问题标题】:Camera API: Cross device issues相机 API:跨设备问题
【发布时间】:2012-10-04 22:19:36
【问题描述】:

我正在开发一个相机应用程序,主要是作为消息传递应用程序的一部分来附加图像等。该应用程序需要适用于 >= SDK 2.2 并且:

不能尽可能多地使用默认的 Android 相机,因为:

  1. 应用程序的性质决定了永远不应将图像保存到磁盘,一些 OEM(三星)喜欢在不给您选择的情况下这样做。

  2. 我不能调用任何其他相机应用程序可以拦截的意图,因为那样该应用程序可以保存图像。

我目前的问题是处理 Android 相机显然讨厌纵向的事实。具体来说,经过一番挖掘后,我正在监视显示器,并在轮换时调用setDisplayOrientation(90)。这可行,但也需要更改表面视图尺寸,并且必须在支持的尺寸内完成,否则参数设置会使应用程序崩溃。

我正在使用另一个 SO sn-p 我找到 heregetBestPreviewSize() 方法),但它有一个明显的问题,我不敢相信我还没有发现其他人有。

takePicture 生命周期的一部分涉及调用PostView 图片回调。这显示了当前暂停的SurfaceView 图像的静止图像,该图像将通过 byteArray 返回到 raw 和/或 jpeg 回调。我的问题是,这张图片在少数看似随机的测试设备上仍然存在偏差!所以行为是用户以完美的 4:3 纵横比看到动态相机图像,直到他们拍摄照片并且呈现给他们的图像被压扁。请注意,字节数组本身是正确的,当我在消息传递端点构造 Bitmap 时,它显示得很好,但这仍然是一个问题。

此时我不知道如何更改静止图像显示。谁能帮我解决这个问题?

【问题讨论】:

  • 你能保留之前的postview图片回调并在实际拍摄照片时显示它吗?最后你能否从拍摄的图片数据中创建一个位图并显示它而不是 postview 图像数据?我想这归结为最终的图像数据是否混乱,或者表面视图是否改变了你的形状。

标签: java android camera


【解决方案1】:

Android 相机系统一团糟。并且被焊接到主板上,相机芯片不会喜欢肖像应用程序 - 所有回调都会在相机方向溢出数据(你收到的缓冲区实际上是与本机相机应用程序共享的内存片) - 如果你想在你的应用程序运行时显示它在肖像模式下,您必须将这些数据翻转到xy

我不会在相机使用的表面视图上显示图像,而是用透明的ImageView 覆盖它并在那里绘制我的位图。

您可能(希望)在 javaocr project 中找到一些灵感,其中 android 守护进程以纵向模式工作并在实时预览中绘制位图。 (请从git 结帐,因为它现在正在发布,我正在努力使用 git 和 maven,请参阅 demos 目录)

【讨论】:

  • 上周五我通过这样做最终“解决”了这个问题 - 构建位图并显示它。我试图避免这种情况,因为我的应用程序已经相当密集,而且我们都知道 Android 3.0 之前的原生位图分配问题。但我离题了...感谢您抽出宝贵时间发帖
  • 确保您在SampleSize 中设置了BitmapFactory 选项。它可以帮助 TON 解决这些内存问题。
【解决方案2】:

我怀疑您的问题存在于几个不同的层面。

传感器支架

首先,每个设备上安装的摄像头传感器都不同。 Google 有样板代码,用于获取该方向并设置正确的旋转值以纠正它here,它适用于 API 8。

AR 校正

第二个问题显然是预览帧与屏幕的纵横比不同。你可以使用this post 来解决这个问题。 surfaceview 尺寸与最佳预览尺寸无关,这些值不必匹配 - 事实上,你的 AR 搞砸了就证明它们不匹配。

预览帧大小!= 图片大小

最后,当您使用 takePicture 拍照时,图片的大小完全独立于预览帧的大小。使用以下查询和设置预览帧大小: setPreviewSize() / getSupportedPreviewSizes()

使用以下查询和设置图片大小(来自takePicture()): getSupportedPictureSizes() / setPictureSize()

您可能会幸运地使用某些设备,图片和预览帧的默认设置将是相同的。并非所有设备都如此。

最后,如果要显示拍摄的图片,如果它与 SurfaceView 的大小不同,则可能还需要对其进行 AR 校正。或者,您可以将其绘制到 ImageView 并使用 ScaleType.CENTER_INSIDE 来保持纵横比。

【讨论】:

    【解决方案3】:

    查看这篇关于如何将 QR 扫描仪切换为纵向的帖子:http://code.google.com/p/zxing/issues/detail?id=178。我不知道这是否与您将图片交换为肖像有关,但也许它提供了一些指导。评论#11 似乎是最有帮助的。 (我不赞同从 Sean Owen 那里窃取 QR 应用程序代码)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-09
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多