java - 使用 Raster 创建图像时出现 ArrayIndexOutOfBoundsException

标签 java image rgb indexoutofboundsexception raster

我正在尝试使用此数组创建图像: [-8421505、-8421505、-8421505、-8421505、...] 它的长度是:62416

BufferedImage img = new BufferedImage(166, 376, BufferedImage.TYPE_INT_RGB);
int pixels[] = new int[166 * 376];

这里是错误所在

img.getRaster().setPixels(0, 0, 166 , 376, pixels);

然后我就保存它

File file = new File("new.png");
ImageIO.write(img, "png", file);  

这是:

ArrayIndexOutOfBoundsException:62416

最佳答案

出于某种原因,尽管看起来 BufferedImage.TYPE_INT_RGB 每个像素应该有 1 个 int。当您使用 WritableRaster#setPixels 时,它实际上每个像素需要 3 个整数。

给定一些输入数据,

int[] values = {...};

其中每个int对应一个像素,8位分别代表RGB。它们需要放入更大的数组中并解压。

int pixels[] = new int[values.length*3];
for(int i = 0; i<values.length; i++){
   pixels[3*i] = (values[i]>>16)&0xff;
   pixels[3*i+1] = (values[i]>>8)&0xff;
   pixels[3*i+2] = (values[i])&0xff;
}

我通过创建一个包含红色、绿色和蓝色的值数组来检查这一点。

int[] values = new int[166*376];
for(int i = 0; i<166*125; i++){
    values[i] = 0xff0000; //red
}
for(int i = 166*125; i<166*250; i++){
    values[i] = 0xff00; //green
}
for(int i = 166*250; i<166*376; i++){
    values[i] = 0xff; //blue
}

关于java - 使用 Raster 创建图像时出现 ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46449621/

相关文章:

javascript - HtmlUnit 获取编码错误的字符串

java - 如何将默认单选选项处理为其他单选选项

java - Icon 类错误,仅在 Web 上显示,而不在 appletviewer 中显示

python - 如何读取cv2.findContours的结果?

c - Fastest 3, unsigned short Max/Min OR Sort for RGB -> HUE calc, 图形特定

java - CriteriaBuilder 使用自定义条件连接两个表

java - IllegalStateException java httpclient

php - 使用 PHP 将图像添加到 mp3 文件的最佳方法?

java - 鼠标光标下的 RGB 值

vba - 在VBA中设置字体颜色