0

我有一些非常简单的代码不起作用:

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语句中使用的是 0、1 还是 2。for问题是,无论我设置哪个像素,我总是得到蓝色和黑色条纹。例如:

在此处输入图像描述

我确定我在这里做错了一些基本的事情,我只是没有看到它是什么。有任何想法吗?

4

1 回答 1

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
    }
}
于 2012-05-30T07:15:06.630 回答