【问题标题】:How to transform image to show the pressure exerted by touch?如何转换图像以显示触摸施加的压力?
【发布时间】:2011-12-22 02:38:43
【问题描述】:

假设我有一个显示枕头图像的 android 应用程序。当有人触摸图像并按下屏幕时,我希望图像被转换以显示压力的效果。例如如果有人按下枕头的图像,触摸点的图像中应该会出现凹陷,就好像它真的被按下了一样。

我已经在网上搜索了有关如何执行此操作的指示,但找不到任何指示。有没有什么图像变换算法可以模拟被压软的东西?

任何指向代码、库或研究论文的指针都会很棒。

我不希望它绝对完美。任何足够好的算法都会有所帮助。

【问题讨论】:

    标签: android algorithm image-processing 3d


    【解决方案1】:

    我发现这个 java 库似乎有很多内置的图像处理过滤器

    http://www.jhlabs.com/ip/filters/index.html

    我认为 warpfilter 是您正在寻找的那个可能会有所帮助

    【讨论】:

    • 谢谢。显然,扭曲过滤器可以达到目的。让我试试看。
    • 不幸的是,过滤器需要 java.awt.*,因此它们无法在 android 上运行。我将不得不重新编写大部分源代码。
    • 我不久前遇到了同样的问题,当我需要在android上评估javascript时,android中没有javax.script
    【解决方案2】:

    无法准确地为您编写代码,但 MotionEvent 中有一个名为 getPressure() 的方法可以为您提供所需的变量来确定如何转换图像。虽然我敢打赌它非常不可靠,并且可能因设备而异。

    【讨论】:

      【解决方案3】:

      你有几种方法,但这本质上是一个艺术问题。

      便宜的方法 我会有一个从“无压力”到“最大压力”的动画,具有透明背景。然后我将动画放在枕头图片的顶部,将压力值映射到动画中的相应帧。您还可以为整个枕头制作动画,让用户只在中间推动它。

      科学方法 您可以使用有限元模型 (http://en.wikipedia.org/wiki/Finite_element_method) 模拟枕头,使用 3D 建模工具(如搅拌机)对其进行渲染,然后以某种方式将结果集成到您的应用中。

      【讨论】:

      • 感谢您的出色回答。我更愿意尝试科学的方法,虽然它看起来很复杂。
      • 有一个视频似乎涵盖了使用 Maya 进行模拟的主题:lugher3d.com/tutorials-for-maya/…。在您的应用程序中使用结果是另一个问题。我没有检查视频,因为需要一个帐户才能下载它。
      【解决方案4】:

      您知道我在考虑您要创建的效果,而实现效果的最佳方法可能不是实时扭曲图像。 首先,您的应用程序将变得非常昂贵(对电池和内存而言),它可能无法在低端 Android 手机上令人满意地运行。 此外,即使您自己制作平均逼真的效果也可能需要大量的试验和错误。

      一个更好的方法是创建 10-25 帧您想要显示的动画效果,您可以使用 Photoshop(液化工具)或 gimp 轻松实现这一点(如果您从未用过这些),

      一旦你有了框架,只需随着用户施加的压力变化而改变框架

      【讨论】:

        【解决方案5】:

        不看 API 演示是我的错。 android sdk (BitmapMesh) 中有一个示例,它做了类似的事情并且实现起来非常简单。谢谢大家的回答。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-06
          • 2011-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多