2016-07-27 6 views
-1

Ich möchte umgebender Rand der JFrame Komponente in meinem aufgenommenen Screenshot (Bilddaten) mit BufferedImage() erhalten.Wie bekomme ich den Standardrahmen der JFrame-Komponente in der BufferedImage-Datenausgabe?

Momentan mache ich das;

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); 
} 

}

Bitte sehen Sie weitere Details png Dateien angehängt.

Original JFrame window; Captured Image

+0

Funktioniert für mich. Welches OS? – copeg

+0

Ist das nicht offensichtlich aus Bildern? Win 7 (Worst-Case-Vista; -]). –

+0

Ich verwende Windows 7 Enterprise (64-Bit.). – avp

Antwort

1

Ich möchte Umrahmung von JFrame Komponente in meinem gefangen Screenshot

Ihr Code zur Zeit im Wurzelbereich des JFrame geht bekommen, die nicht die JFrame Dekorationen enthält. Um die JFrame Dekorationen im Bild zu erhalten, geben Sie die JFrame Instanz ein. zB

BufferedImage imageOutput = getImageData(f);