2013-04-18 1 views
3

나는 이미지 처리 작업을하고 있는데 질문이있다.이미지 변환기 java

프로젝트에서 이미지를 읽고 이미지를 회색으로 변환하고 싶습니다. 현재 rgb2gray 함수로 변환하려고하지만 여전히 작동하지 않습니다.

import java.awt.Color; 
import java.awt.Component; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.JFrame; 

public class ImageTesting extends Component { 
    private static int[] pixel; 
    private static BufferedImage b; 

    BufferedImage image; 

    public void paint(Graphics g) { 
     g.drawImage(image, 0, 0, null); 
    } 

    public ImageTesting() { 
     try { 
      image = ImageIO.read(new File("teste.jpg")); 
     } catch (IOException e) { 
     } 
    } 

    public Dimension getPreferredSize() { 
     if (image == null) { 
      return new Dimension(400, 400); 
     } else { 
      return new Dimension(image.getWidth(null), image.getHeight(null)); 
     } 
    } 

    public static BufferedImage rgb2gray(BufferedImage bi) { 
     int heightLimit = bi.getHeight(); 
     int widthLimit = bi.getTileWidth(); 
     BufferedImage converted = new BufferedImage(widthLimit, heightLimit, BufferedImage.TYPE_BYTE_GRAY); 
     for (int height = 0; height < heightLimit; height++) { 
      for (int width = 0; width < widthLimit; width++) { 
       Color c = new Color(bi.getRGB(width, height) & 0x00fffff); 
       int newRed = (int) ((0.2989f * c.getRed()) * 2);// 0.2989f//multiplicr po 2 
       int newGreen = (int) ((0.5870f * c.getGreen()) * 2);// 0.5870f 
       int newBlue = (int) ((0.1140f * c.getBlue()) * 2); 
       int roOffset = newRed + newGreen + newBlue; 
       converted.setRGB(width, height, roOffset); 
      } 
     } 
     return converted; 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) throws IOException { 
     // TODO code application logic here 
     JFrame f = new JFrame("Load Image Sample"); 
     JFrame g = new JFrame("Image RGB"); 
     f.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent e) { 
       System.exit(0); 
      } 
     }); 
     g.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent e) { 
       System.exit(0); 
      } 
     }); 
     f.add(new ImageTesting()); 
     f.pack(); 
     f.setVisible(true); 
     g.add(new ImageTesting()); 
     rgb2gray(b); 
    } 
} 

프로그램을 실행할 때 나타나는 오류입니다.

누군가 나를 도울 수 있다면, 나는 사과한다. 감사

편집 : 나는이 문제를 해결하기 위해 관리,하지만 지금은 다른 질문이 올라왔다. 내 작업을 계속하려면 결과 이미지에서 가장 많은 10 점을 찾고 색인의 값이 0 인 색인에서 검정색으로 된 다른 이미지를 반환하고 값이 1 인 색인에서 흰색을 반환하지만이 시점에서 단계를 해결하는 가장 좋은 방법을 이해하지 못합니다.

+0

* "나는 의심의 여지가있다"* 중고차 세일즈맨 및 정치인의 주장에 대한 의심을 피하십시오. 질문이 있으면 질문하십시오 (& 질문). 귀하의 질문은 무엇인가? –

+0

어떤 오류가 있습니까? –

+0

@AndrewThompson 나는 단어의 선택에 대한 비난을 구할 것이다. OP가 영어 원어민이 아니 어서 "나는 의심 스럽습니다"라는 말을 사용하는 것이 일반적이지 않은 어구 일 수 있습니다. –

답변

1

main() 메소드에 문제가있는 것 같지 않습니까? 두 개의 완전히 동일한 JFrame 인스턴스를 만든 다음 원본 이미지를 표시하는 Imagetesting 구성 요소를 추가합니다. 그리고 마지막에 rgb2gray를 실행할 때 결과는 아무데도 보내지지 않습니다. http://www.jhlabs.com/ip/filters/

그것은 확대됨에 사용하기 간단 : 나는 이미지 필터를 사용하는 것이 좋습니다

+0

이러한 오류는 다음과 같습니다 imagetesting.ImageTesting.main (ImageTesting.java:91) – FCoelho

+0

드미트리에서 imagetesting.ImageTesting.rgb2gray (ImageTesting.java:52) \t에서 스레드 "주요"java.lang.NullPointerException이 \t에서 예외, 나는이 문제를 해결할 수 있었다. 도움 주셔서 감사합니다. – FCoelho

0

, 여기에 관련 문서를 참조하십시오.

+0

나는 보러 간다. 고마워. – FCoelho