Java ImageIO,无法设置像素值?

时间:2012-05-30 07:08:51

标签: java bufferedimage javax.imageio

我有一些非常简单的代码无法正常工作:

int[] manualPixels = new int[width * height * 3];
for (int index = 0; index < manualPixels.length; index++) {
    if (index % 3 == 2) {
        manualPixels[index] = 255;
    }
}
BufferedImage pixelImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);    
pixelImage.setRGB(0, 0, width, height, manualPixels, 0, width);

ImageIO.write(pixelImage, "jpeg", tempFile);

根据if循环中for语句中是使用0,1还是2,我应该确定输出红色,绿色或蓝色图像。问题是,不管怎样,我总是得到蓝色和黑色的条纹,无论我设置哪个像素。例如:

enter image description here

我确信必须有一些基本的东西我在这里做错了,我只是没有看到它是什么。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

INT_RGB将所有频道打包到int的最不重要的三个八位字节中。这意味着您将每个第三个像素设置为蓝色,其余像素保持黑色。 (但这与您的图像不匹配 - 您是否在生成代码后更改了代码?)

请改为尝试:

int[] manualPixels = new int[width * height];
for (int index = 0; index < manualPixels.length; index++) {
    switch (index % 3) {
        case 0: manualPixels[index] = 0xFF0000; break; // red
        case 1: manualPixels[index] = 0x00FF00; break; // green
        case 2: manualPixels[index] = 0x0000FF; break; // blue
    }
}