获取图像的顶点?

时间:2013-03-24 06:17:56

标签: 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.getPixel(i, row) != 0) || (pixmap.getPixel(row, i) != -256)) {
        hasColor[i] = true;
    } else {
        hasColor[i] = false;
    }
}

这应该跟踪哪些像素是空的,哪些不是。但我不知道应该从哪里开始。

是否有可用于帮助的算法或其他内容?有人可以提供意见吗?

1 个答案:

答案 0 :(得分:0)

你拥有的是光栅艺术品。

您需要的是矢量轮廓。

从矢量转换为栅格很容易,栅格转换为矢量,而不是那么多。

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

  1. 将您的作品转换为黑白图像(如您的像素颜色存在/不存在矩阵)。
  2. 使用Adobe Illustrator的“实时跟踪”功能对图像进行矢量化。
  3. 将轮廓多边形导出为您可以轻松读回的格式。
  4. 使用此作为碰撞检测的输入。
  5. 这是另一种方法:

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

           *****
          *     *
         *       *
        *         *
         *       *
          *     *
           *****
    

    B)将“拟合”定义为轮廓的优点,通过检查六边形内部像素的百分比来计算(不必是上面所示的规则形状的图形)。 C)改变顶点的位置,直到找到最佳拟合(或直到你累了)。

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