2011-03-06 105 views
1

我正在寫一個方法,它需要三個二維詮釋數組(代表一個圖像的R,G和B值),寬度和高度,和一個布爾值表示如果指定的圖像是彩色或黑色和白色。我想要的方法是從給定的輸入數據創建一個BufferedImage。創建一個自定義的BufferedImage

這是我到目前爲止有:

public static BufferedImage createImage(int[][] r, int[][] g, int[][] b, 
    int width, int height, boolean isColor) { 

    BufferedImage ret; 
    if (isColor) 
     ret = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
    else 
     ret = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); 
    WritableRaster raster = ret.getRaster(); 

    for (int i = 0; i < height; i++) { 
     for (int j = 0; j < width; j++) { 
      if (isColor) { 
       raster.setSample(j, i, 0, r[i][j]); 
       raster.setSample(j, i, 1, g[i][j]); 
       raster.setSample(j, i, 2, b[i][j]); 
      } 
      else 
       raster.setSample(j, i, 0, r[i][j]); 
     } 
    } 

    return ret; 
} 

不過,我寫了一個單元測試應該創建填充白色(255,255,255)5x5的彩色圖像,但柵格數據填充具有非常大的值,而不是255.我不太熟悉這個圖像的東西和一般的AWT,所以我覺得我沒有正確創建BufferedImage。我一直在嘗試引用BufferedImage的Java API,但沒有太多的運氣搞清楚它。任何幫助,將不勝感激。

+1

你最近看到的是柵格數據?您是將BufferedImage繪製到顯示器上,還是直接分析像素數據?根據您的代碼,圖像似乎是正確生成的,因此需要更詳細的信息來了解發生問題的位置。 – 2011-03-06 01:03:48

回答

3

你的代碼對我來說很好。圖像應該填充0xffffff(每個R,G和B中255),十進制將爲16777215。 (如果你有一個alpha通道,那麼每個完全不透明的像素將是0xffffffff,這將是十進制的-1。)

+0

出於某種原因,我期待柵格數據包含255的樣本值(這沒有意義),但是您說得對,柵格填充了16777215,這是有道理的。 – 2011-03-06 02:21:49