You need to enable JavaScript to run this app. 按12像素间隔遍历图像生成二维数组出现下标越界如何解决
优惠活动
大模型
产品
解决方案
定价
更多

按12像素间隔遍历图像生成二维数组出现下标越界如何解决

问题原因

  1. 二维数组下标和循环逻辑不匹配
    你定义的二维数组是 int[][] pixels = new int[height / 12][width / 12],第一维长度为 height/12(对应Y方向的采样数),第二维长度为 width/12(对应X方向的采样数)。
    但你的循环外层i遍历的是X方向采样数(范围0~width/12-1),内层j遍历的是Y方向采样数(范围0~height/12-1),赋值时用 pixels[i][j],当width/12 > height/12时,i的取值会超过第一维的最大索引,就会出现你遇到的数组越界错误。
  2. counterX、counterY计数逻辑冗余,还容易触发坐标越界
    你从坐标1开始采样,直接丢失了(0,0)位置的像素,且当图片宽高不是12的倍数时,很容易取到超出图片范围的坐标。
  3. 黑色判断逻辑效率低
    转十六进制字符串对比的方式性能远不如直接做位运算判断。

修复方案

直接通过循环下标计算采样坐标,去掉冗余的计数器逻辑,同时对齐数组下标即可:

int width = image.getWidth();
int height = image.getHeight();
// 计算采样数,如果需要保留不足12的边界像素可以改成 (height + 11)/12 和 (width + 11)/12 向上取整
int sampleY = height / 12;
int sampleX = width / 12;
int[][] pixels = new int[sampleY][sampleX];

for (int j = 0; j < sampleY; j++) {
    // 计算Y方向采样坐标,如果你确实需要从1开始偏移可以改为 j*12 + 1
    int y = j * 12;
    for (int i = 0; i < sampleX; i++) {
        // 计算X方向采样坐标,如果你确实需要从1开始偏移可以改为 i*12 + 1
        int x = i * 12;
        int rgb = image.getRGB(x, y);
        // 直接判断是否为纯黑,不需要转字符串
        pixels[j][i] = (rgb == 0xff000000) ? 1 : 0;
    }
}
return pixels;

内容的提问来源于stack exchange,提问作者Mannual

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 16:54:02