Java 获取图像的顶点?

Java 获取图像的顶点?,java,math,graphics,Java,Math,Graphics,我正在使用精灵艺术,我需要为碰撞检测器生成一个多边形(顶点数组) 我有一个getPixel(x,y)方法可以用来获取像素的颜色。我不需要任何花哨的颜色检测或任何东西,只需要实心像素和透明像素。以下是我在大脑开始融化之前开始做的事情: boolean[] hasColor = new boolean[size]; for (int i = 0; i < size; i++) { int row; row = i % width; if ((pixmap.getPix

我正在使用精灵艺术,我需要为碰撞检测器生成一个多边形(顶点数组)

我有一个
getPixel(x,y)
方法可以用来获取像素的颜色。我不需要任何花哨的颜色检测或任何东西,只需要实心像素和透明像素。以下是我在大脑开始融化之前开始做的事情:

boolean[] hasColor = new boolean[size];

for (int i = 0; i < size; i++) {
    int row;
    row = i % width;
    if ((pixmap.getPixel(i, row) != 0) || (pixmap.getPixel(row, i) != -256)) {
        hasColor[i] = true;
    } else {
        hasColor[i] = false;
    }
}
boolean[]hascaolor=新布尔值[size];
对于(int i=0;i
这样可以跟踪哪些像素是空的,哪些不是空的。但我不知道我应该从这里走到哪里


有没有一个算法或者什么我可以帮上忙的?有人能提供输入吗?

您拥有的是光栅艺术品

你需要的是一个矢量轮廓

从矢量到光栅的转换很容易,从光栅到矢量的转换就不那么容易了

以下是一个可能的工作流:

  • 将您的作品转换为黑白图像(如像素颜色显示/不显示矩阵)
  • 使用Adobe Illustrator的“实时跟踪”功能将此图像矢量化
  • 将轮廓多边形导出为易于读回的格式
  • 将其用作碰撞检测的输入
  • 以下是另一种方法:

    A) 假设轮廓看起来像六边形,如下所示:

           *****
          *     *
         *       *
        *         *
         *       *
          *     *
           *****
    
    B) 将“拟合”定义为轮廓的优度,通过检查六边形内像素的百分比来计算(不必是上面显示的规则形状的图形)。 C) 更改顶点的位置,直到找到最佳匹配(或直到感到疲劳)


    当然,步骤(C)是最难的一步。另外,如果你的精灵需要更多的顶点,你可能需要从一个八角形/n角形开始。

    也许你在寻找这样的东西?