【发布时间】:2013-04-28 11:36:46
【问题描述】:
这是我的绘画方法:
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 的最后一个参数上,它要求“扫描线步幅”,老实说我不知道它是什么。 (但我发现某处可能是图像的宽度)。我假设其他参数是正确的。
结果如下:
原图:
结果:
我将在之后处理图像。我只是打开并保存同一张图片。
【问题讨论】:
-
如何填充 rgbIntArray?
-
您的代码块中的
rgbArray是什么? -
是从图片中读取的B G R数组。
-
我猜
width和/或height与原始图像不同,最有可能相差 1 个像素。你如何初始化这两个变量? -
我刚刚意识到 width*height = 82075 和 rgbIntArray.lenght = 82320(rgbIntArray 中还有 245(宽度)个位置)