Java 如何使用图形捕获滚动窗格的内容
我试图从JScrollpane的内容创建一个缓冲图像。Jscrollpane尺寸为250x200。内容溢出,图像中仅捕获可见部分。我正在使用Java graphics 2D 有没有办法捕获滚动页面的完整内容?只需将内容绘制到BuffereImage,而不是滚动窗格 例如:Java 如何使用图形捕获滚动窗格的内容,java,image,swing,jscrollpane,graphics2d,Java,Image,Swing,Jscrollpane,Graphics2d,我试图从JScrollpane的内容创建一个缓冲图像。Jscrollpane尺寸为250x200。内容溢出,图像中仅捕获可见部分。我正在使用Java graphics 2D 有没有办法捕获滚动页面的完整内容?只需将内容绘制到BuffereImage,而不是滚动窗格 例如: public class Test { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable(
public class Test {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
final Image image =
new ImageIcon("stackoverflow.png").getImage();
JPanel imagePanel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, this);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(image.getWidth(this),
image.getHeight(this));
}
};
JScrollPane pane = new JScrollPane(imagePanel);
pane.setPreferredSize(new Dimension(200, 200));
JOptionPane.showMessageDialog(null, pane);
BufferedImage newImage = getImageFromComponent(imagePanel);
JLabel label = new JLabel(new ImageIcon(newImage));
JOptionPane.showMessageDialog(null, label);
}
});
}
private static BufferedImage getImageFromComponent(Component component) {
BufferedImage img = new BufferedImage(
component.getWidth(), component.getHeight(),
BufferedImage.TYPE_INT_RGB);
Graphics g = img.createGraphics();
component.paint(g);
g.setFont(new Font("impact", Font.PLAIN, 30));
g.drawString("Image of Panel", 40, 50);
g.dispose();
return img;
}
}
首先,将面板放在滚动窗格中
当我们关闭它时,面板的内容被绘制到BuffereImage,并添加到标签
见。谢谢!谢谢。滚动窗格中呈现的图像就是我想要的。要获得图像大小,我需要获得滚动窗格/面板的大小,这将绘制完整的图像,甚至是不可见的部分。这正是我的代码所做的。有什么问题吗?再次感谢。现在明白了。