2

pngたとえば、透明な画像であるゲーム オブジェクトのスプライトがあるとします。

宇宙船スプライト

この画像から、ゲーム オブジェクトを含むポリゴンを作成したいと考えています。

宇宙船ポリゴン

そのための既存のアルゴリズムがあると確信していますが、何も見つかりませんでした。

私は次のようなものを期待しています:

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

1 に答える 1

1

この質問を参照してください。遅くなりますが、どれだけ正確にするかによって異なります (2 番目の回答は、ずさんですが、少し高速です)。他の質問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;
}
于 2013-03-11T16:05:14.760 に答える