我有一些非常简单的代码无法正常工作:
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,我应该确定输出红色,绿色或蓝色图像。问题是,不管怎样,我总是得到蓝色和黑色的条纹,无论我设置哪个像素。例如:
我确信必须有一些基本的东西我在这里做错了,我只是没有看到它是什么。有什么想法吗?
答案 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
}
}