2016-07-27 4 views
-1

BufferedImage()를 사용하여 캡처 한 스크린 샷 (이미지 데이터)에서 JFrame 구성 요소의 경계를 얻고 싶습니다.BufferedImage 데이터 출력에서 ​​JFrame 구성 요소의 기본 경계를 얻으려면 어떻게해야합니까?

현재이 작업을 수행 중입니다.

import java.awt.Component; 
import java.awt.image.BufferedImage; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.*; 
import javax.imageio.ImageIO; 
import java.io.File; 

class getframeImageExample { 

public static BufferedImage getImageData(
     Component component) { 

    BufferedImage image = new BufferedImage(
      component.getWidth(), 
      component.getHeight(), 
      BufferedImage.TYPE_INT_RGB 
    ); 
    component.printAll(image.getGraphics()); 
    return image; 
} 

public static void main(String[] args) { 
    Runnable r = new Runnable() { 
     public void run() { 
      final JFrame f = new JFrame("JFrame Border"); 
      f.setUndecorated(false); 
      f.setLocation(500,300); 
      f.setSize(560, 420); 

      JMenuItem screenshot = 
        new JMenuItem("Take Snapshot"); 
      screenshot.addActionListener(
        new ActionListener(){ 
         public void actionPerformed(ActionEvent ae) { 
          BufferedImage imageOutput = getImageData(f.getRootPane()); 
          try { 
           // write the image as a PNG 
           ImageIO.write(
             imageOutput, 
             "png", 
             new File("CapturedImage.png")); 
          } catch(Exception e) { 
           e.printStackTrace(); 
          } 
         } 
        }); 
      JMenu menu = new JMenu("Menu"); 
      menu.add(screenshot); 
      JMenuBar menuBar = new JMenuBar(); 
      menuBar.add(menu); 
      f.setJMenuBar(menuBar); 
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      f.setVisible(true); 
     } 
    }; 
    SwingUtilities.invokeLater(r); 
} 

}

자세한 내용은 PNG 파일을 첨부 참조하시기 바랍니다.

Original JFrame window; Captured Image

+0

작품. 어떤 OS인가? – copeg

+0

사진에서 이것이 분명하지 않습니까? Win 7 (최악의 경우 Vista; -)). –

+0

Windows 7 Enterprise (64 비트)를 사용하고 있습니다. – avp

답변

1

내 캡처 한 스크린 샷

귀하의 코드는 현재 JFrame 장식을 포함하지 않는 JFrame의의 루트 창에서 통과에 JFrame의 구성 요소의 주변 경계를 좀하고 싶습니다. 이미지에 JFrame 장식을 얻으려면 JFrame 인스턴스를 전달하십시오. 나를 위해 예를 들어

BufferedImage imageOutput = getImageData(f); 
관련 문제