【问题标题】:How do I capture the contents of a Scrollpane using graphics如何使用图形捕获滚动窗格的内容
【发布时间】:2014-12-13 22:36:18
【问题描述】:

我正在尝试从 JScrollpane 的内容创建缓冲图像。 Jscrollpane 尺寸为 250x200。内容溢出,只有可见部分被捕获在图像中。我正在使用 Java 图形 2D。

有没有办法捕获滚动页面的完整内容?

【问题讨论】:

标签: java image swing jscrollpane graphics2d


【解决方案1】:

只需将 contents 绘制到 BufferedImage,而不是 滚动窗格

例如:

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

首先将面板放在滚动窗格内。

当我们关闭它时,面板的内容被绘制到一个 BufferedImage 中,并添加到一个标签中。

【讨论】:

  • 谢谢!欣赏它。在滚动窗格中呈现的图像是我所追求的。要获得图像大小,我需要获得滚动窗格/面板大小,这将绘制完整的图像,甚至是不可见的部分。
  • 这正是我的代码所做的。有什么问题或疑问吗?
  • 再次感谢。现在明白了。
猜你喜欢
  • 2011-04-22
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多