从透明png精灵制作多边形的算法

时间:2013-03-11 15:12:11

标签: java png sprite polygon

说,我有一个游戏对象的精灵,它是一张透明的png图片。

Spaceship sprite

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

Spaceship polygon

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

我期待的是:

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

1 个答案:

答案 0 :(得分:1)

this question 会慢,但这取决于你想要的准确度(第二个答案比较粗,但速度要快一些)。在另一个问题上从Area获得getOutline()后,请尝试使用此代码(未经测试):

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;
}