자바

2014-12-20 1 views
1

나는 이미지의 흑백을 나타내는 행렬이 어디에 문제가 있음을자바

final BufferedImage img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_BYTE_GRAY); 
    Graphics2D g = (Graphics2D)img.getGraphics(); 
    ... /*reading from file*/ 
    try (InputStream in = new FileInputStream("file.mac"); 
     Reader reader = new InputStreamReader(in, encoding); 
     // buffer for efficiency 
     Reader buffer = new BufferedReader(reader)) { 
     int r; 
     int i=0; 
     int j=0; 
     while ((r = buffer.read()) != -1) { 
      g.setColor(new Color(?,?,?)); 
      g.fillRect(i, j, 1, 1); 
      i++; 
      if(i==WIDTH){ 
       j++; 
       i=0; 
      } 
     } 
    } 

처럼 JAVA에서 으로, BufferedImage의을 파일을 읽기 위해 노력하고있어에서 매트릭스에서 그레이 스케일 이미지를 표시 이 줄의 색을 무엇으로 설정할 지 r의 변수가 매트릭스의 그레이 스케일을 나타내는 변수가됩니다.

+0

문자 (바이트가 아님)는 그레이 스케일 레벨을 나타 냅니까? 'encoding'의 가치는 무엇입니까? – VGR

답변

0

회색 색상을 보관하려면 빨강, 녹색 및 파랑 색상 매개 변수를 동일한 값으로 설정해야합니다. Color 생성자는 [0, 255] 사이의 RGB 값을 받아, 그래서 당신은 [0, 255] 스케일과 일치하기 위해 R 값을 확장해야합니다 :

int grey = r/rMax * 255 //Gives you a grey value between [0, 255]; 

rMax이 파일에서 가장 큰 연구의 가치.

Color[] colors = new Color[256]; 

for (int i = 0; i <=255; i++) { 
    colors[i] = new Color(i, i, i); 
} 
:

그럼 내가 중복 Color 객체를 많이 생성하는 것을 피하기 위해서 첫째 회색 색상의 배열을 만드는 제안, 모든 일을보다 효율적으로하기 위해

g.setColor(new Color(grey, grey, grey)); 

에 색상을 설정

다음 루프의 Color을 루프에 설정하십시오.

g.setColor(colors[grey]);