【问题标题】:Get vertices of image?获取图像的顶点?
【发布时间】:2013-03-13 19:26:34
【问题描述】:

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

我有一个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;
    }
}

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

有什么算法或什么可以帮助我吗?有人可以提供意见吗?

【问题讨论】:

标签: java math graphics


【解决方案1】:

您拥有的是光栅艺术品。

你需要的是一个矢量轮廓。

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

这是一种可能的工作流程:

  1. 将您的作品转换为黑白图像(如像素颜色存在/不存在矩阵)。
  2. 使用 Adob​​e Illustrator 的“实时跟踪”功能将此图像矢量化。
  3. 将轮廓多边形导出为您可以轻松读取的格式。
  4. 将此作为碰撞检测的输入。

这是另一种方法:

A) 假设轮廓看起来像一个六边形,像这样:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多