2011-03-02 85 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