使用缓冲图像写RGB图像
问题描述:
我有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个不同的级别。我究竟做错了什么 ?
答
你没有做错任何事情,但JPEG压缩意味着每个像素中的电平没有被完全记录 - 当图像未经压缩时,JPEG压缩伪像将锐利边缘稍微扩展到其他像素。
哦,我看到了问题..有没有wa获得无损jpg压缩? – AnkurVj 2011-03-02 02:16:30
如果您想要100%的准确性,请使用PNG或其他无损格式。 JPG可以获得更好的准确性,但永远不会完美,因为它对图像进行了优化。 – Dan 2011-03-02 02:18:27
@Dan thanx提示 – AnkurVj 2011-03-02 02:22:41