2017-02-16 12 views
1

x 좌표와 y 좌표로 점을 그리고 이미지 파일에 출력을 저장하려고했지만 할 수 없습니다. (그것들을 JFrame에서 볼 필요는 없습니다.) 검색을 통해 배웠을 때, 나는 그림을 만들어서 JFrame에 보여줄 수 있지만이 출력을 파일에 저장할 수는 없습니다.포인트를 그리고 Java에서 출력 이미지를 저장하는 방법은 무엇입니까?

public static void main(String[] args) { 
try { 
     final JFrame frm = new JFrame("Points"); 
     final Panel pnl = new Panel(); 
     pnl.setPreferredSize(new Dimension(1000, 1000)); 
     frm.setContentPane(pnl); 
     frm.pack(); 
     frm.setVisible(true); 
     frm.repaint(); 
     Image img; 
     img = frm.createImage(1000, 1000); 
     ImageIO.write((RenderedImage) img, "jpeg", new File("C:/.../p.jpeg")); 
     frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } catch (final Exception e) { 
     e.printStackTrace(); 
    } 
} 


public static class Panel extends JPanel { 

    @Override 
    public void paintComponent(final Graphics g) { 
     g.setColor(Color.RED); 
     for (final Point p : CandidatePoints) { 
      g.fillRect((int) p.getX() * 10, (int) p.getY() * 10, 20, 20); 
     }} 

게다가, 나는 ImageIO에서와의 BufferedImage의 인기 해결책을 시도했지만이 경우에 나는 좌표 시스템을 만들 수 없습니다 대신 내가 이미지 파일에 검은 사각형을 얻었다.

public static void main(String[] args) { 
BufferedImage bimage = new BufferedImage(200, 200, 
       BufferedImage.TYPE_BYTE_INDEXED); 

     Graphics2D g2d = bimage.createGraphics(); 

     g2d.setColor(Color.red); 
     for (final Point p : CandidatePoints) { 
      g2d.fillRect((int) p.getX() * 10, (int) p.getY() * 10, 20, 20); 
      ImageIO.write(bimage, "jpeg", new File("C:/.../p.jpeg")); 
      g2d.dispose(); 
     }} 

당신은 이미지를 만들고 파일을 저장하기 위해 모든 스윙 구성 요소가 필요하지 않습니다 사전

+1

더 나은 도움을 받으려면 [MCVE] 또는 [짧은, 자체 포함, 올바른 예] (http://www.sscce.org/)를 게시하십시오. –

+2

루프 안의 이미지를 _not_ 작성하지 말고 루프를 지나야합니다. 즉, 먼저 이미지를 채운 다음 쓰고 처리하십시오. – Thomas

+0

또한 'TYPE_BYTE_INDEXED'는 JPEG에서 제대로 작동하지 않습니다. – haraldK

답변

3

에 감사드립니다. 여기

가 원을 그리기 및 파일로 저장하는 작은 예입니다

public class ImageExample 
{ 
    public static void main (String[] args) throws IOException 
    { 
     final BufferedImage image = new BufferedImage (1000, 1000, BufferedImage.TYPE_INT_ARGB); 
     final Graphics2D graphics2D = image.createGraphics(); 
     graphics2D.setPaint (Color.WHITE); 
     graphics2D.fillRect (0,0,1000,1000); 
     graphics2D.setPaint (Color.BLACK); 
     graphics2D.drawOval (0, 0, 1000, 1000); 
     graphics2D.dispose(); 

     ImageIO.write (image, "png", new File ("C:\\image.png")); 
    } 
} 

당신이 출력에 정확히 JPEG 이미지가 필요합니다 경우 이미지 유형으로 놀러해야 할 수도 있습니다.

검정 직사각형을 얻는 이유는 배경을 아무 것도 채우지 않고 JPEG 형식이 투명 이미지를 지원하지 않기 때문입니다. 이미지를 투명하게하려면 예를 들어 PNG를 사용하십시오. 또는 이미지 배경에 원하는 색상으로 채울 수 있습니다. 또한 주석에서 언급했듯이 모든 이미지 유형이 서로 다른 출력 이미지 형식으로 잘 작동하는 것은 아닙니다.

또한 모든 이미지 및 구성 요소의 좌표가 왼쪽 위 모서리 ([0,0] 좌표)에서 시작됩니다.

그리고 데스크탑 스윙 애플리케이션 UI의 일부를 이미지 파일에 저장하려면 Swing 구성 요소가 제공하는 메서드를 사용하여 이미지에서 가져온 이미지를 그래픽에 그려야합니다.

+0

을 호출해야합니다. 고맙습니다, – Kadir