【问题标题】:Algorithm to make a polygon from transparent png sprite从透明png精灵制作多边形的算法
【发布时间】:2013-02-26 20:03:51
【问题描述】:

比如说,我有一个游戏对象的精灵,它是一个具有透明度的 png 图像。

我想从这个图像中创建一个包含我的游戏对象的多边形。

我很确定它有一个现有的算法,但我没有找到任何算法。

我希望是这样的:

public static Polygon getPolygon(BufferedImage sprite)
{
    // get coordinates of all points for polygon
    return polygon;
}

【问题讨论】:

  • 这取决于您希望它有多准确。对于 100% 的准确度,这将非常昂贵并且可以填充 1000 多个点。这可以通过洪水填充或通过颜色分析沿边界移动的系列来完成。
  • @Legend 谢谢!我需要准确性和效率之间的中庸之道。我将阅读有关洪水填充算法的信息。

标签: java png sprite polygon


【解决方案1】:

this question。它很慢,但这取决于你想要它有多准确(第二个答案比较草率,但有点快)。在另一个问题上从getOutline() 获得Area 后,尝试使用此代码(未经测试):

public static Polygon getPolygonOutline(BufferedImage image) {
    Area a  = getOutline(image, new Color(0, 0, 0, 0), false, 10); // 10 or whatever color tolerance you want
    Polygon p = new Polygon();
    FlatteningPathIterator fpi = new FlatteningPathIterator(a.getPathIterator(null), 0.1); // 0.1 or how sloppy you want it
    double[] pts = new double[6];
    while (!fpi.isDone()) {
        switch (fpi.currentSegment(pts)) {
        case FlatteningPathIterator.SEG_MOVETO:
        case FlatteningPathIterator.SEG_LINETO:
            p.addPoint((int) pts[0], (int) pts[1]);
            break;
        }
        fpi.next();
    }
    return p;
}

【讨论】:

  • 谢谢!这正是我想要的。
  • 你知道javascript中是否有相同的东西吗?有一个图像 png => 得到多边形
猜你喜欢
  • 1970-01-01
  • 2014-04-16
  • 2016-08-08
  • 2015-05-31
  • 2012-09-09
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
相关资源
最近更新 更多