这是我的绘画方法:
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
bi.setRGB(0, 0, width, height, rgbIntArray, 0, width);
ImageIO.write(bi, "bmp", new File("C:/Users/Felipe/Desktop/img2.bmp"));
这是我如何填充rgbIntArray的方法:
rgbIntArray = new int[(rgbArray.length / 3)];
int j = 0;
for (int i = 0; i < rgbArray.length; i += 3)
{
rgbIntArray[j] = unsignedToBytes(rgbArray[i]) +
unsignedToBytes(rgbArray[i + 1]) * 256 +
unsignedToBytes(rgbArray[i + 2]) * 65536;
j++;
}
我测试了这些值,它们似乎是正确的。
我认为问题出在 setRGB
的最后一个参数上,它要求“扫描线跨度”,但说实话我不知道它是什么(但我在某处找到它可能是图像的宽度)。我假设其他参数是正确的。
以下是结果:
原始图像:
结果:
我稍后会对图像进行处理。我只是打开并保存同一张图像。
rgbArray
是什么? - user1131435width
和/或height
与原始图像不同,很可能相差1个像素。你如何初始化这两个变量? - Lone nebula