说,我有一个游戏对象的精灵,它是一个png
透明的图像。
我想从此图像创建一个包含我的游戏对象的多边形。
我很确定它有一个现有的算法,但我还没有找到任何算法。
我期待类似的东西:
public static Polygon getPolygon(BufferedImage sprite)
{
// get coordinates of all points for polygon
return polygon;
}
看到这个问题。它会很慢,但这取决于您想要它的准确度(第二个答案比较草率,但要快一点)。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;
}