【问题标题】:How to break the image into shattered shapes in android如何在android中将图像分解成破碎的形状
【发布时间】:2014-03-10 07:22:26
【问题描述】:

我试图将图像破碎成碎片,但无法理解逻辑,请告诉我如何实现。

我希望下面的图片可以给出我的想法,我想要什么,将位图分解成三角形或任何形状的碎片。稍后我将打乱这些位图形状并给最终用户重新排列它们的顺序。

【问题讨论】:

  • 你试过 BitmapShader 吗?将图像变成形状的目标是什么?一些益智游戏?您需要拖放它们吗?
  • 我认为这可能很有用stackoverflow.com/questions/21778690/…
  • 是的,它是一款益智游戏,也可以拖放,我从未尝试过 Bitmapshader

标签: android algorithm


【解决方案1】:

好的,如果您想重新排列各个部分(例如在拼图中),那么每个三角形/多边形都必须出现在具有透明背景的矩形位图中,因为这就是在 Java/Android(以及大多数其他环境)。

在 Android 中有一种方法可以进行这种屏蔽,称为 porter-duff 合成。 Android 文档很差,甚至不存在,但是有很多文章介绍了它在 Java 中的使用。

基本上,您创建一个矩形透明位图,其大小刚好足以容纳您的切口。然后在该位图上绘制一个实心三角形(透明度非零),表示切口。它可以是你喜欢的任何颜色。然后使用 Porter-Duff 模式在源图像顶部的正确位置绘制切口,该模式复制透明度数据但不复制 RGB 数据。您的抠图将保留在透明背景下。

如果您使剪切位图与源图像大小相同,这会容易得多。我建议先让这个工作。这样做的缺点是双重的。首先,您将在大位图周围移动以在小切口周围移动,因此 UI 会变慢。其次,您会为位图使用大量内存,并且在某些版本的 Android 上,您可能会耗尽内存。

但是,一旦您让它适用于与源图像大小相同的位图,将其更改为适用于较小的位图应该非常简单。您的大部分“胡闹”都在于寻找和使用正确的 Porter-Duff 模式。由于它们只有 16 个,因此尝试所有这些并查看它们的作用并不费力。他们可能会提出其他谜题。

我注意到您的切口部分都是多边形。只需少量额外的复杂性,您就可以将它们制作成任何您喜欢的形状,包括看起来像普通的拼图。为此,请使用 Path 类来定义用于切口的形状。 Path 类可以很好地与 Porter-Duff 合成配合使用,允许您可以想象几乎任何形状的剪切。我在我的一个应用程序中广泛使用它。

【讨论】:

    【解决方案2】:

    我不确定你要制作什么益智游戏,但如果对破碎的碎片没有特殊要求, 只有可以跨越整个矩形的总数,您可以尝试执行以下步骤, 这个想法基本上是通过知道n具有两个端点的非相交线位于矩形的4条边中的任何一条上,形成了n+1不相交的区域。

    1. 创建数组并存储行信息
    2. 对于n 次,您随机选择两个端点,它们位于矩形的这 4 个边上

      2a。尝试将这两个点连接起来:从任一端点开始,如果与之前绘制的另一条线相交,则在相交处停止,否则在另一个端点停止

    3. 您将获得n+1 不相交的区域,其中n 绘制线条

    如果您对区域有一些特殊要求,您可以限制您的线路选择。

    关于实现细节,你可能想看看dot producteuler's theorem

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2017-10-28
    • 2023-03-25
    • 2016-07-10
    相关资源
    最近更新 更多