2014-06-30 4 views
0

나는 오래된 시험을 해결하고 있습니다. Java에서는 이미지 파일 input.ppm을 열고 그레이 스케일로 변환 한 다음 output.ppm으로 저장하려고합니다. 그래서 모든 내용 (각 픽셀의 RGB 정보)을 읽고 평균값을 취하여 세 번 저장해야 픽셀이 검은 색이됩니다. & 흰색.Java에서 ppm을 읽고 쓰는 방법

다음 코드는 제대로 작동하지 않습니다. 너비와 높이가 올바르지 않습니다. 또한 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); } 
    }  
} 

다음은 김프를 사용하여 png에서 만든 두 개의 ppm 파일의 세 가지 샘플입니다. http://www.sendspace.com/filegroup/HcY7Mks9SXtr9mKniVe8lSIEnYLGwsT5

+0

참고로 [ppm2pgm] (http://netpbm.sourceforge.net/doc/ppmtopgm.html)은'.299 r + .587 g + .114 b'를 사용합니다 (이 사람의 인용문을 꼭 읽으십시오 페이지도 참조하십시오. 참조를받지 못한 경우 - https://www.youtube.com/watch?feature=player_detailpage&v=SWAmICTFSok#t=53) –

답변

1

ppm format에 대한 설명을 참조하십시오. 따라서 오류는 텍스트로 시작되며 이진 입력을 사용하고 있습니다. 텍스트로 시작한 다음 나는 당신에게 맡기는 바이트로 전환하는 즐거움.

관련 문제