2011-03-02 150 views
0

我有2維字節陣列I [] [],每個條目,其中爲0或1(即255)使用緩衝圖像寫RGB圖像

現在我用下面的代碼寫RGB格式的圖像。

public void writeImage(String outputFileName){ 
    BufferedImage BI = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 

    for(int y = 0;y < height;y++){ 
     for(int x = 0;x < width;x++){ 
      int gray = (int) I[y][x] & 0xFF; 
      int newRGB = (gray << 16) + (gray << 8) + gray; 
      BI.setRGB(x, y, newRGB); 
     } 
    } 
    try{ 
     ImageIO.write(BI, "JPG", new File(outputFileName)); 
    } catch(IOException e){ 
     System.err.println("Unable to output results"); 
    } 
} 

圖像寫入成功。由於原始數據數組只包含兩個不同的值(0和255),因此我預計寫入的圖像也會有兩個不同的級別。然而,書面圖像有92個不同的級別。我究竟做錯了什麼 ?

回答

4

你沒有做錯任何事情,但JPEG壓縮意味着每個像素中的電平沒有被完全記錄 - 當圖像未經壓縮時,JPEG壓縮僞像將銳利邊緣稍微擴展到其他像素。

+0

哦,我看到了問題..有沒有wa獲得無損jpg壓縮? – AnkurVj 2011-03-02 02:16:30

+1

如果您想要100%的準確性,請使用PNG或其他無損格式。 JPG可以獲得更好的準確性,但永遠不會完美,因爲它對圖像進行了優化。 – Dan 2011-03-02 02:18:27

+0

@Dan thanx提示 – AnkurVj 2011-03-02 02:22:41