2013-07-20 3 views
0

자바에서 스크린 샷을 만들려면 java.awt.Robot 클래스 'createScreenCapture() 메서드를 사용하고 있습니다. 그러나 나는 Rectangle 모양의 스크린 샷을 만들 수있었습니다. 이제 제 질문은 Robot 클래스 또는 다른 명시적인 코드를 사용하여 사용자 정의 모양의 스크린 샷을 찍는 방법이 있습니까?맞춤형 스크린 샷을 찍는 방법?

그리고 사용자 정의 모양의 스크린 샷은 투명해야하며 PNG 형식으로 저장해야합니다.

답변을 보내 주시면 감사하겠습니다.

답변

3

Robot 클래스 또는 다른 명시 적 코드를 사용하여 사용자 정의 모양의 스크린 샷을 찍는 방법은 무엇입니까?

저는 직사각형 이미지에서 모양의 이미지를 만드는 방법을 보여주는 Andrew Thompson의 솔루션을 좋아합니다. Cut Out Image in Shape of Text을 참조하십시오.

모든 모양으로이 작업을 수행 할 수 있습니다. (camickr가 이미 제안 된 것처럼)

Polygon polygon = new Polygon(); 
polygon.addPoint(250, 50); 
polygon.addPoint(350, 50); 
polygon.addPoint(450, 150); 
polygon.addPoint(350, 150); 
g.setClip(polygon); 
g.drawImage(originalImage, 0, 0, null); 
+0

나는 사용자가 직접 선택하는 것을 의미 직사각형을 선택한 다음 다시 모양을 만드는 것이 아니라 자체적으로 모양을 만듭니다. (답장 +1을 주셔서 감사합니다) – user12458

+0

나는 일을하는 방법을 좋아합니다, 그들은 간단합니다 :) 과거에는'SimpleAttributeSet'과 이제는'Polygon'입니다. 무료 교육을 보내 주셔서 감사합니다 :)! – user12458

+0

@JavaTechnical, 그러나 당신이 당신 자신의 질문에 대한 당신 자신의 대답이 아니면 대답을 받아들이지 않습니다. – camickr

2

Graphics#setClip(Shape) 잘 작동 : 예를 들어, 당신은 같은 일을하여 자신의 다각형을 만들 수 있습니다

enter image description here

import java.awt.*; 
import java.awt.event.*; 
import java.awt.geom.*; 
import java.awt.image.*; 
import java.io.File; 
import javax.imageio.ImageIO; 
import javax.swing.*; 

public class ScreenShotClipTest { 
    private JComponent makeUI() { 
    JPanel p = new JPanel(new BorderLayout()); 
    p.add(new JScrollPane(new JTree())); 
    p.add(new JButton(new AbstractAction("screenshot") { 
     @Override public void actionPerformed(ActionEvent e) { 
     JButton b = (JButton)e.getSource(); 
     Window f = SwingUtilities.getWindowAncestor(b); 
     try { 
      BufferedImage ss = new Robot().createScreenCapture(f.getBounds()); 
      int w = ss.getWidth(null), h = ss.getHeight(null); 
      BufferedImage bi = new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB); 
      Graphics g = bi.createGraphics(); 
      g.setClip(new RoundRectangle2D.Float(0,0,w,h,64,64)); 
      g.drawImage(ss, 0, 0, null); 
      g.dispose(); 
      ImageIO.write(bi, "png", new File("screenshot.png")); 
     } catch(Exception ex) { 
      ex.printStackTrace(); 
     } 
     } 
    }), BorderLayout.SOUTH); 
    return p; 
    } 
    public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     @Override public void run() { 
     createAndShowGUI(); 
     } 
    }); 
    } 
    public static void createAndShowGUI() { 
    final JFrame f = new JFrame(); 
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    f.getContentPane().add(new ScreenShotClipTest().makeUI()); 
    f.setSize(320, 240); 
    f.setLocationRelativeTo(null); 
    f.setVisible(true); 
    } 
} 
관련 문제