【问题标题】:How can I display a photo on a mobile device using the current device orientation and the orientation at the time the photo was taken? [closed]如何使用当前设备方向和拍摄照片时的方向在移动设备上显示照片? [关闭]
【发布时间】:2013-12-26 07:11:37
【问题描述】:

我有一个应用程序。它有两种活动,一种是用于拍照的定制相机,另一种是展示该照片。

我的要求是,每当我拍照时,这张照片都应该根据拍摄照片时设备的方向和设备的当前方向显示。您可能已经在全景应用程序中看到过类似的功能。

例如,假设我拍摄了一张视图的照片并且我移动了我的手机,那么我需要以一个角度显示同一张照片。我该怎么做?

【问题讨论】:

    标签: android rotation accelerometer gyroscope magnetometer


    【解决方案1】:

    您应该首先估计设备方向。这最好使用传感器融合来实现,请参阅以下教程:http://www.thousand-thoughts.com/2012/03/android-sensor-fusion-tutorial/。方向应表示为矩阵或四元数。如果您可以选择,请首选四元数,因为算法会运行得更快。

    对于应用程序的其余部分,让我们使用 3D 引擎来显示您已经拍摄的照片。您可以选择 3D 引擎,选择您最熟悉的引擎。我们将在 3D 引擎中将已拍摄的照片显示为带纹理的矩形。

    首先我们必须确定这些带纹理的矩形的大小。我们必须选择显示矩形的距离:这是任意的,我们取 1 米。然后我们需要知道相机的水平和垂直视场角,这取决于设备。为了便于解释,让我们假设我们使用 60 度水平和垂直视场(方形)相机。这些照片相当于距离观察者 1m 的 1m x 1m 方格。这是简单的三角函数,希望你能形象化。如果您需要更多解释,请告诉我。

    当方向角为空时,我们可以数学计算矩形的坐标。在我们之前的示例中,正方形的坐标为 (+0.5, +0.5), (+0.5, -0.5), (-0.5, -0.5), (-0.5, +0.5)。每次我们拍照时,我们都会通过方向四元数/矩阵旋转零角坐标来计算它的坐标。然后,我们可以在这些坐标处向 3D 引擎添加一个带纹理的矩形,并将照片作为纹理。

    我们现在需要做的就是随着设备方向的变化更新相机的方向。这是通过 3D 引擎完成的,可能会使用与方向旋转四元数/矩阵相反的方向旋转所有已注册的对象,但这实际上取决于您的 API。如果需要,您还可以叠加当前的相机图像。

    在上面的解释中,我使用了一个具有 60 度水平和垂直视野的方形相机,以帮助您直观地看到发生了什么。零角矩形坐标的数学公式是 (X, Y), (X, -Y), (-X, -Y), (-X, Y) 其中 X = sin(X_angle) 和 Y = sin( Y_角度)。

    我没有包含任何代码,因为我不想偏向您的技术选择。但是通过上面的解释,你应该能够用你选择的语言和库来实现你想要的。请告诉我们进展如何。

    【讨论】:

    • 感谢 rply Marcv81,但我想知道一件事,当这个角度满足我们的要求时,如果我们从左边来,我怎么能像相机一样渲染这个图像,然后图像渲染从左边开始,如果我们来自右边,那么这个图像应该从右边渲染。我怎样才能做到这一点?逻辑是什么,我是在计算先前坐标的投影吗?我如何计算投影?是否有任何代码或开源项目。请帮帮我..抱歉英语不好..
    • 我明白了。一开始我不能很好地理解你的问题。我已经编辑了我的答案以提供更多细节并帮助您实现我认为您的目标(即:一种全景应用程序)。
    • 嗨,如果您可以包含与此相关的任何代码,那么这对我来说会很容易。所以请包含一些代码。我会感谢你的。我是陀螺仪传感器、加速度计和磁力计,用于获取捕获的图像坐标。
    • @Shivamsaxena 我建议您使用这个详细的答案作为您编写自己的代码的指南。然后,如果您遇到困难,请发布另一个问题以寻求帮助。我认为您不应该期望这个答案作者为您编写您的应用程序。
    • @Duncan,我不希望这个人为我的应用程序编写代码。我的意思是,如果你有任何代码或与此相关的任何参考,那么请分享我不要写给我。我也是说对你来说,如果你有任何参考,任何简单的代码,那么请分享我。我是开发新手。在这里我可以为你们所有的老年人提供帮助。再次为我糟糕的英语感到抱歉。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多