2013-01-11 2 views
1

가능한 중복 :
Convert a Graphics2D to an Image or BufferedImage애플릿의 내용을 이미지로 만드는 방법은 무엇입니까?

죄송합니다. 이것은 매우 기본적인 질문입니다. 그러나 나는이 플랫폼에 아주 익숙하다. graphics2d 그리기 기능을 사용하여 선을 그리는 중입니다. 이걸 내 시스템에 이미지로 저장하고 싶습니다. 그걸 알아 내서 봤는데 BufferedImage 클래스가이 일을하고 나서 imagedraw 함수를 사용할 때 유용하다는 것을 알았습니다.

하지만 코드에서 정확하게 사용하는 방법을 알 수 없었습니다. 어느 누구도 나를 도울 수 있습니까?

여기 내 코드입니다.

import javax.imageio.ImageIO; 
import javax.swing.*; 
import java.awt.event.*; 
import java.awt.geom.Line2D; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

public class DrawAndSaveImage extends JApplet { 
    public void init() { 
     setBackground(Color.lightGray); 
    } 

public void paint(Graphics g) { 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.setPaint(Color.black); 
    g2d.draw(new Line2D.Double(50,150,150,150)); 

} 

public static void main(String s[]) { 
    JFrame frame = new JFrame("sample image"); 
    JApplet applet = new DrawAndSaveImage(); 
    frame.getContentPane().add("Center", applet); 
    applet.init(); 
    frame.setSize(200, 200); 
    frame.show(); 
} 
} 
+0

무엇이 작동하지 않습니까? –

+0

['ComponentImageCapture'] (http://stackoverflow.com/questions/5853879/java-swing-obtain-image-of-jframe/5853992#5853992)도 참조하십시오. –

+0

@AndrewThompson 감사합니다. 이것은 내가 찾고 있었던 바로 그 것이다. 대단히 고마워. – user1969103

답변

1
  1. JFramemain은, 애플릿에 사용되는 안된다.

  2. 는 방법 paint() 오버라이드 (override)하지 마십시오

  3. 사용 SwingUtilities.invokeLater()가 쓸 수

  4. ImageIO.write()

    을 체결하지 않는 한

  5. 애플릿이 외부 파일에서 읽기/쓰기 할 수 없습니다 GUI를 만들 수 파일로 저장할 이미지

+1

1. * ".. 하이브리드 응용 프로그램을 만들지 않는 한."* 이것은 프레임에 애플릿을 보여주는 다른 방법입니다. OTOH 나는 그것이 그 예에 왜 있는지 궁금해했다. 2. 확장을 사용할 수 있습니다. 'JApplet'은'paintComponent (Graphics)'메소드를 가지고 있지 않습니다. 3. 좋습니다. * * ".. 서명되지 않은 경우"* 또는 JNLP API 서비스 ([demo.] (http://pscode.org/jws/api.html))를 사용합니다. 5. 좋았어. +1 –

+0

@AndrewThompson 그래픽을 이미지에 저장할 수 있습니까? 그것을 애플릿에로드하는 대신. 저에게 알려주세요. 모든 샘플 코드 링크. (그럴 것입니다.) – user1969103

+0

* "애플릿에로드하는 대신"* 대답은 아마도 예입니다. 그러나 애플릿이 전혀 존재하지 않는 이유에 대해서는 조금 분명하지 않습니다. 명령 줄 앱에서이 작업을 수행 할 수 있습니다.(GUI 없음). 다음은 [이미지에 직접 그림을 그린 예]입니다 (http://stackoverflow.com/questions/13440201/how-to-resize-text-in-java/13440543#13440543). –

1

첫째,이 같은 BufferedImage 인스턴스를 만들 수 있습니다

private BufferedImage image = new BufferedImage(600, 800, BufferedImage.TYPE_INT_RGB); 

그런 다음 당신이 그것을에서 Graphics2d 개체를 얻을 수 있습니다 : 다음

Graphics2D g2d = image.createGraphics(); 

을, 당신은 ImageIO API를 사용할 수 있습니다 이미지를 저장합니다. 당신은 하이브리드 응용 프로그램을 만들려고하지 않는

+0

'600, 800'은이 유즈 케이스에 대해 최적이 아닙니다. 대신 구성 요소의 기본 크기 또는 실제 크기를 사용하십시오. –

+0

맞아, 나는 그것을 예제로 사용했다. – Swapnil