Graphics#setClip(Shape)
잘 작동 : 예를 들어, 당신은 같은 일을하여 자신의 다각형을 만들 수 있습니다
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);
}
}
나는 사용자가 직접 선택하는 것을 의미 직사각형을 선택한 다음 다시 모양을 만드는 것이 아니라 자체적으로 모양을 만듭니다. (답장 +1을 주셔서 감사합니다) – user12458
나는 일을하는 방법을 좋아합니다, 그들은 간단합니다 :) 과거에는'SimpleAttributeSet'과 이제는'Polygon'입니다. 무료 교육을 보내 주셔서 감사합니다 :)! – user12458
@JavaTechnical, 그러나 당신이 당신 자신의 질문에 대한 당신 자신의 대답이 아니면 대답을 받아들이지 않습니다. – camickr