說,我有一個遊戲對象的精靈,它是一個具有透明度的png
圖像。從透明PNG精靈製作多邊形的算法
我想從這個圖像,這將包含我的遊戲對象創建多邊形。
我敢肯定有它現有的算法,但我還沒有發現任何。
我希望是這樣的:
public static Polygon getPolygon(BufferedImage sprite)
{
// get coordinates of all points for polygon
return polygon;
}
說,我有一個遊戲對象的精靈,它是一個具有透明度的png
圖像。從透明PNG精靈製作多邊形的算法
我想從這個圖像,這將包含我的遊戲對象創建多邊形。
我敢肯定有它現有的算法,但我還沒有發現任何。
我希望是這樣的:
public static Polygon getPolygon(BufferedImage sprite)
{
// get coordinates of all points for polygon
return polygon;
}
見this question。它將會緩慢,但它取決於你想要多準確(第二個答案是sloppier,但更快一點)。你從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;
}
謝謝!這正是我想要的。 – 2013-03-11 16:34:33
你知道在JavaScript中是否有相同的東西?有一個圖像png =>獲取多邊形 – 2014-03-27 12:00:07
這取決於你想如何準確它是。爲了100%的準確性,這將是非常昂貴的,可以填補超過1000分。這可以通過填充填充或通過顏色分析沿邊界移動的系列來完成。 – 2013-03-11 15:45:00
@傳奇人物謝謝!我需要精確度和效率之間的一箇中間值。我將閱讀關於洪水填充算法。 – 2013-03-11 15:52:48