【发布时间】:2014-04-03 01:36:22
【问题描述】:
我可以成功地在图像文件中读取和写入值,该文件准确地显示了创建的图像。
我只是使用 getRGB() 读取值,然后将它们分别移位到红色、绿色和蓝色数组中。然后我只需使用 setRGB() 方法将它们设置回另一个 BufferedImage 对象。
现在,我正在尝试更改像素值,比如红色阵列的第一个像素。然后我打印出红色数组的前 5 个像素,第一个值在调用 setRGB() 方法之前按预期更改,但是当我再次读入该图像时,第一个值现在恢复到其原始值?
有人知道使用 setRGB() 只会更改内存中的值,但实际上并不会写入更改后的值吗?
编辑 - 这是我的代码的示例表示(由于取回图像,这非常有效)
//READ IN IMAGE
BufferedImage imgBuf =null;
imgBuf = ImageIO.read(new File("test.jpg"));
int w = imgBuf.getWidth();
int h = imgBuf.getHeight();
int[] RGBarray = imgBuf.getRGB(0,0,w,h,null,0,w);
//BIT SHIFT VALUES INTO ARRAY
for(int row=0; row<h; row++)
{
for(int col=0; col<w; col++)
{
alphaPixels[row][col] = ((RGBarray[g]>>24)&0xff);
redPixels[row][col] = ((RGBarray[g]>>16)&0xff);
greenPixels[row][col] = ((RGBarray[g]>>8)&0xff);
bluePixels[row][col] = (RGBarray[g]&0xff);
g++;
}
}
//BIT SHIFT VALUES BACK TO INTEGERS
for(int row=0; row<h; row++)
{
for(int col=0; col<w; col++)
{
int rgb = (alphaPixels[row][col] & 0xff) << 24 | (redPixels[row][col] & 0xff) << 16 | (greenPixels[row][col] & 0xff) << 8 | (bluePixels[row][col] & 0xff);
imgBuf.setRGB(col, row, rgb);
}
}
//WRITE IMAGE BACK OUT
ImageIO.write(imgBuf, "jpeg", new File("new-test.jpg"));
【问题讨论】:
标签: java rgb bufferedreader