簡體   English   中英

用java在灰度圖像中寫入像素數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM