2014-10-18 2 views
1

JScrollpane의 내용에서 버퍼링 된 이미지를 만들려고합니다. Jscrollpane 디멘션은 250x200입니다. 컨텐츠가 스필 오버되고 가시 섹션 만 이미지에 캡처됩니다. Java 그래픽 2D를 사용하고 있습니다.그래픽을 사용하여 Scrollpane의 내용을 캡처하는 방법

스크롤 페이지의 전체 내용을 캡처하는 방법이 있습니까?

+0

보기 ['ComponentImageCapture' (http://stackoverflow.com/a/5853992/418556). –

답변

2

내용물 스크롤 창이 아닌 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; 
    } 
} 

먼저 패널 스크롤 창 안에 넣고.

enter image description here

우리가 그것을 닫습니다

는 패널의 내용이 BufferedImage의에 그려진, 그리고 라벨에 추가됩니다.

enter image description here

+0

감사합니다. 고맙습니다. scrollpane에서 렌더링되는 이미지는 내가 무엇을했는지입니다. 이미지 크기를 얻으려면 스크롤 패널/패널 크기를 가져와야합니다. 그러면 전체 이미지, 심지어 보이지 않는 부분까지 페인트됩니다. – user907737

+0

그건 내 코드가하는 것과 정확히 같습니다. 문제가 있습니까? –

+0

다시 한번 감사드립니다. 알았어. – user907737