[英]Write pixel data in a grayscale image in 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]);
`
但它也不會給我原始圖像。
誰能給我提供這個問題的解決方案? 提前致謝。
我對基於 Java 的圖像處理一無所知,但我確實對圖像處理有很多了解,所以我會看看我是否可以給你任何想法。 如果我錯了,請不要向我開槍 - 我只是提出一個想法。
在灰度圖像中,紅色、綠色和藍色值都是相同的,即紅色=綠色=藍色。 因此,當您調用 getRGB 並使用 0xff 進行 AND 運算時,您可能只獲得藍色分量,但這沒關系,因為紅色和綠色是相同的 - 因為它是灰度的。
我懷疑問題在於,當您將其寫回以創建新的輸出圖像時,您只設置了藍色分量,而不是紅色和綠色——這應該仍然是相同的。 嘗試回寫
original pixel + (original pixel << 8 ) + (original pixel <<16)
這樣您不僅可以設置藍色,還可以設置紅色和綠色組件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.