2012-01-14 22 views
-1

M正在處理某些圖像處理程序,並遇到顯示灰度圖像的問題。我做的是,我使用getRGB提取像素值,然後嘗試更改這些像素值。但改變這些像素值後,我仍然得到了以前緩衝的相同圖像。我的部分代碼如下給出: -如何在使用setRGB之後在java中顯示灰度圖像?

int [] rgbArray=new int[width*height]; 
    BufferedImage buffer = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
    buffer = ImageIO.read(new File(file)); 


    //Before changing the pixel values 
    buffer.getRGB(0, 0, width, height, rgbArray , 0,width); 
    int a = (0xff000000 & rgbArray[0]) >>> 24; 
    int r = (0x00ff0000 & rgbArray[0]) >> 16; 
    int g = (0x0000ff00 & rgbArray[0]) >> 8; 
    int b = (0x000000ff & rgbArray[0]); 
    System.out.println("a " + a + " r " + r + " g " + g + " b " + b); 
    System.out.println("rgbArray["+0+"] = "+ rgbArray[0]); 
    for(int i = 0 ; i<width*height; i++) 
    { 
    rgbArray[0]=0x808080; //Changing pixel values to grey 
    } 
    buffer.setRGB(0, 0, width, height, rgbArray , 0,width); 


    //After changing the pixel values 
    buffer.getRGB(0, 0, width, height, rgbArray , 0,width); 
    a = (0xff000000 & rgbArray[0]) >>> 24; 
    r = (0x00ff0000 & rgbArray[0]) >> 16; 
    g = (0x0000ff00 & rgbArray[0]) >> 8; 
    b = (0x000000ff & rgbArray[0]); 
    System.out.println("a " + a + " r " + r + " g " + g + " b " + b); 
    System.out.println("rgbArray["+0+"] = "+ rgbArray[0]); 

輸出的像素值出來成爲既原始和新的像素正確的,但我不能觀看新的圖像,它顯示了老即原始圖像顯示不是變化的圖像。

+0

爲了更好地提供幫助,請發佈[SSCCE](http://sscce.org/)。 – 2012-01-14 16:55:32

+0

您正在第2行中分配一個大的'BufferedImage',但隨後將其拋棄並將其替換爲對ImageIO.read()的調用。爲了記憶,可能不想這樣做。 – 2012-01-14 17:08:41

+0

yup thax ...但我怎麼能顯示這個變化的像素作爲圖像? – Arizvi 2012-01-14 17:39:03

回答

1
rgbArray[0]=0x808080; //Changing pixel values to grey 

那裏,你只是第一個灰色的像素changig。你可能打算做什麼:

rgbArray[i]=0x808080; //Changing pixel values to grey 

這將改變每個像素爲灰色。

//編輯:

當然,那麼每一個像素是完全一樣的(灰色),可與方式更少的代碼來完成,例如:

Graphics2D g2 = buff.createGraphics(); 
    g2.setColor(Color.grey); 
    g2.fillRect(0, 0, buff.getWidth(), buff.getHeight()); 
    g2.dispose(); 

如果你想有一個黑白色圖片,而不是一個顏色,請嘗試:

BufferedImageOp op = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null); 
    buffer = op.filter(buffer, null); 
+0

對不起,它是rgbArray [i] = 0x808080;在原代碼我複製它錯了..我得到正確的像素值,但我沒有得到正確的圖像顯示... – Arizvi 2012-01-14 17:09:02

+0

@Arizvi,這很奇怪。如果我用0替換0,加載一個圖像,運行你的代碼,然後保存它,它會改變(每個像素設置爲灰色)。這就是人們所期望的(所有像素都分配了一個新的值,所以結果應該與原始的不同)。 – tim 2012-01-14 17:36:18

+0

是的,它的確是每個像素都變成了灰色,但爲什麼它沒有顯示在圖像上? ?我仍然得到舊的彩色圖像,但不是面板上的新灰色圖像... – Arizvi 2012-01-14 17:42:08

相關問題