【问题标题】:Checking for overlapping images with a hole in an image检查图像中是否存在有孔的重叠图像
【发布时间】:2012-09-02 00:31:35
【问题描述】:

我有两个图像视图。它们是“拼图”,我想测试一个是否适合另一个。并不是说框架重叠。我猜它是一个 CGRect 的东西......但似乎他们测试了外部边界。任何想法,将不胜感激?谢谢。

【问题讨论】:

  • 我有两个 png 的透明区域/另一个图像的切口。

标签: ios xcode core-graphics cgrect cgrectmake


【解决方案1】:

只是在这里集思广益......也许这会让你想到一些对你有用的东西。如果图像不重叠,则在图像 B 上绘制图像 A 将产生与在图像 A 上绘制图像 B 相同的图像。如果它们重叠,则会产生不同的图像。您可以执行类似绘制图像 A,然后 B。创建结果的校验和,再次绘制 A,然后校验和。如果校验和匹配,则拼图适合。

如果您有一个代表每个图像的 1 位掩码,那么如果它们不重叠,则对它们进行 OR 运算和 XOR 运算将得到相同的结果,而如果它们重叠,则会得到不同的结果。

【讨论】:

    【解决方案2】:

    你事先知道正确的棋子顺序吗?可能最好将标签分配给每个UIImageView,这将代表图像的索引号。然后,您只需创建一种网格并检查该块放置在哪个单元格中。如果单元格编号和UIImageView 标记匹配 - 那么这是正确的位置。

    如果您只有两张图像并且一张必须适合另一张的特定区域,您可以存储该孔的框架并检查该片是否放置在该框架中心附近的某个位置。它将更加用户友好,因为当您检查像素或位掩码时,您希望用户非常精确。或者您的比较代码应该允许一些变化并且会非常复杂。

    但如果您不想硬编码孔框,您可以动态计算它(只需找到图像中的透明区域)。无论如何,这个解决方案将比动态检查位匹配更有效。

    【讨论】:

    • 它们可以被硬编码......并且可以提前设置顺序。我不知道如何检查透明区域。用户可以旋转和移动棋子。我将在内部部分的大小中放置一个缓冲空间,以便它有一点摆动空间。我的想法就像一个钉在洞里的东西(尽管这些碎片可能不是对称的)。
    • 您可以不使用框架,而只能使用它们的中心。存储匹配的中心并检查该块的中心是否在附近的某个地方。如果用户允许旋转物体,我认为只有少数正确的角度,它们也可以很容易地存储和检查,即使有一些小的差异。
    猜你喜欢
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    相关资源
    最近更新 更多