我正在開發一個圖像處理項目,在這個項目中我必須填充破裂繪畫的數字化圖像。我必須將彩色圖像轉換爲灰度圖像,對灰度圖像的二維數組執行一些計算並將其寫回灰色圖像。這個代碼是:在java中的灰度圖像中寫入像素數據
BufferedImage colorImage=ImageIO.read(new File(strImagePath));
BufferedImage image = new BufferedImage(colorImage.getWidth(),colorImage.getHeight(),BufferedImage.TYPE_BYTE_GRAY);
Graphics g = image.getGraphics();
g.drawImage(colorImage, 0, 0, null);
g.dispose();
ImageIO.write(image,"PNG",new File("Image.PNG"));
BufferedImage imgOriginal=ImageIO.read(new File("Image.PNG"));
int width=image.getWidth();
int height=image.getHeight();
BufferedImage im=new BufferedImage(width,height,BufferedImage.TYPE_BYTE_GRAY);
int arrOriginal[][]=new int[height][width];
for(int i=0;i<height;i++)
for(int j=0;j<width;j++)
arrOriginal[i][j]=imgOriginal.getRGB(j,i)& 0xFF;
for(int i=0;i<height;i++)
for(int j=0;j<width;j++)
im.setRGB(j,i,arrOriginal[i][j]);
ImageIO.write(im,"PNG",new File("Image1.PNG"));
但輸出圖像很暗得多,我沒有得到原始圖像回(我沒有做任何更改)。
我認爲setRGB()語句應該有一些變化,但我不知道是什麼。
要寫入圖像後,我也曾嘗試:
`
BufferedImage im = new BufferedImage(width,height,BufferedImage.TYPE_BYTE_GRAY);
WritableRaster raster = im.getRaster();
for(int i=0;i<height;i++)
for(int j=0;j<width;j++)
raster.setSample(j,i,0,arrOriginal[i][j]);
`
但是這也沒有給我原始圖像回來。
任何人都可以提供我解決這個問題? 在此先感謝。
你應該知道firefox和chrome不會渲染相同顏色的png,它也可以來自java渲染引擎。 – Kiwy
@Kiwy我正在使用javax.swing,因爲我的項目是一個獨立的項目。 –
另請參閱http://stackoverflow.com/questions/3106269/how-to-use-type-byte-gray-to-efficiently-create-a-grayscale-bufferedimage-using – halfbit