如何在Java中读取和写入ppm

时间:2014-06-30 17:58:34

标签: java graphics image-manipulation

我正在解决旧考试。在Java中,我想打开一个图像文件input.ppm,将其转换为灰度,并将其保存为output.ppm。因此,我必须阅读其所有内容(每个像素的RGB信息),取平均值并保存三次,使像素变为黑色和白色。

以下代码无法正常运行。宽度和高度不正确。此外,文件output.ppm为空。并且无法正确读取RGB值。

import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.File; 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class slika {

    public static void main(String[] args){ 
        File input = new File("input.ppm"); 
        File output = new File("output.ppm"); 

        try{DataInputStream in = new DataInputStream(new FileInputStream(input));
            DataOutputStream out = new DataOutputStream(new FileOutputStream(output));
            in.read(); 
            int w=in.readInt(); //System.out.println("width="+w);
            int h=in.readInt(); //System.out.println("height="+h);
            in.read();
            for(int i=0; i<w*h; i++){ 
                int r=in.read(); //System.out.println("red="r);
                int g=in.read(); //System.out.println("green="g);
                int b=in.read(); //System.out.println("blue="b);
                int avg=(r+g+b)/3; //greyscale pixels
                out.write(avg);
                out.write(avg);
                out.write(avg);
            }
            in.close();
            out.close();
        } catch (IOException ex) { System.err.println(ex); } 
    }    
}

下面添加了三个ppm文件样本,其中两个是我使用GIMP从png创建的。 http://www.sendspace.com/filegroup/HcY7Mks9SXtr9mKniVe8lSIEnYLGwsT5

1 个答案:

答案 0 :(得分:1)

查看ppm format的说明。所以错误是它以 text 开头,并且你正在使用二进制输入。很高兴从文本开始,然后切换到我留给你的字节。