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
Funktioniert für mich. Welches OS? – copeg
Ist das nicht offensichtlich aus Bildern? Win 7 (Worst-Case-Vista; -]). –
Ich verwende Windows 7 Enterprise (64-Bit.). – avp