以下のツールを使って画面キャプチャツールをつくっていっるのですが、キャプチャするとフルスクリーンでキャプチャされてしまいます。
指定の範囲やマウスで範囲指定した時などのキャプチャ方法が知りたいです。
マウスリスナーを使い範囲指定するのかなというところまでわかりました。
実際に追加するソースコード等を教えていただけると
助かります。
MainInit
lang
1public class MainInit implements ActionListener, MouseListener, MouseMotionListener{ //impriments(組み込む) 2 private JFrame mainFrame; 3 private Container contentPane; 4 private JPanel itemPanel; 5 private JPanel textPanel; 6 private JPanel buttonPanel; 7 private JTextField textField; 8 private JButton dirButton; 9 private JButton addButton; 10 private ScreenShot screenShot; 11 private String folderpath; 12 private JLabel folderlabel; 13 14 15 private ItemBox itemboxtest1; 16 private ItemBox itemboxtest2; 17 private ItemBox itemboxtest3; 18 private ItemBox itemboxtest4; 19 20 private Thumbnail DrawPanel; 21 22 private JFrame mainFrame2; 23 private Point startPoint; 24 private Point endPoint; 25 private int x; 26 private int y; 27 public MainInit(){ 28 mainFrame = new JFrame("エビデンスキャプチャ"); 29 mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainFrame.setSize(500, 300); mainFrame.setLocationRelativeTo(null); contentPane = mainFrame.getContentPane(); 30 31 contentPane.setLayout(null); 32 33 34 dirButton = new JButton("Dir"); dirButton.setBounds(20, 0, 80, 30); 35 contentPane.add(dirButton); addButton = new JButton("Capture"); 36 addButton.setBounds(400, 0, 90, 60); 37 contentPane.add(addButton); 38 39 40 41 42 43 JMenuBar menubar = new JMenuBar(); 44 JMenu menu1 = new JMenu("設定"); JMenu menu2 = new JMenu("ヘルプ"); 45 JMenuItem menuitem1 = new JMenuItem("設定"); 46 47 menubar.add(menu1); 48 menubar.add(menu2); 49 menu1.add(menuitem1); 50 51 mainFrame.getRootPane().setJMenuBar(menubar); 52 folderlabel = new JLabel(); 53 textField = new JTextField(); 54 //「追加」ボタンとアクション・リスナーの関連付け 55 dirButton.addActionListener(this); 56 dirButton.setActionCommand("Dir"); addButton.addActionListener(this); 57 addButton.setActionCommand("Capture") 58 59 60 61 itemPanel = new JPanel(); itemPanel.setBounds(0, 0, 500, 100); 62 contentPane.add(itemPanel); 63 textPanel = new JPanel(); textPanel.setLayout(null); 64 contentPane.add(textPanel); 65 textPanel.setBounds(0,80, 500, 100); 66 67 buttonPanel = new JPanel(); 68 69 buttonPanel.setLayout(null); 70 contentPane.add(buttonPanel); 71 buttonPanel.setBounds(0,180,500,200); 72 ; 73 74 75 itemboxtest1 = new ItemBox(); 76 itemPanel.add(itemboxtest1); 77 78 79 itemboxtest2 = new ItemBox(); 80 itemPanel.add(itemboxtest2); 81 82 itemboxtest3 = new ItemBox(); 83 itemPanel.add(itemboxtest3); 84 85 itemboxtest4 = new ItemBox(); 86 itemPanel.add(itemboxtest4); 87 88 89 textPanel.add(folderlabel); 90 folderlabel.setBounds(0, 30, 200, 30); 91 92 textPanel.add(textField); 93 textField.setBounds(320, 30, 150, 30); 94 95 buttonPanel.add(dirButton); 96 buttonPanel.add(addButton); 97 98 99 100 101 102 folderpath = "C:\\tmp"; 103 folderlabel.setText(folderpath); 104 105 textField.setText("UT_CNT_%d-%d-%d-%d"); mainFrame.setVisible(true); 106 screenShot = new ScreenShot(); 107 108 } 109 110 111 112 113 public void actionPerformed(ActionEvent event){ 114 String cmd = event.getActionCommand(); 115 116 if(cmd.equals("Capture")){ 117 beforeProcess(); 118 int x = mainFrame.getX(); 119 int y = mainFrame.getY(); 120 121 122 123 124 try{ 125 File filepath = FilePathCreate(); 126 127 mainFrame.setLocation(-1000,-1000); 128 129 screenShot.screenCapture(filepath, endPoint, endPoint); 130 131 132 mainFrame.setLocation(x, y); 133 134 new Thumbnail(filepath); 135 136 } catch (AWTException e){ 137 138 e.printStackTrace(); 139 } catch (IOException e){ 140 e.printStackTrace(); 141 } 142 143 144 } 145 146 147 else if(cmd.equals("Dir")) { 148 149 150 151 152 153 JFileChooser filechooser = new JFileChooser(folderpath); 154 filechooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 155 156 int selected = filechooser.showSaveDialog(this.contentPane); 157 if (selected == JFileChooser.APPROVE_OPTION){ 158 File file = filechooser.getSelectedFile(); 159 folderpath = file.getAbsolutePath(); 160 folderlabel.setText(folderpath); 161 162 163 } 164 } 165 166 167 } 168 169 170 public File FilePathCreate() { 171 String filename = FileNameCreate(); 172 String name = filename; 173 int m = 1; 174 do { 175 File f = new File(folderpath, name + ".jpg"); 176 if (!f.exists()) { 177 return f; 178 } 179 ++m; 180 name = filename + "(" + m + ")" ; 181 } while (m < 100); // 無限ループ防止 182 throw new IllegalStateException("パス生成失敗"); 183 184 } 185 186 187 public String FileNameCreate() { 188 String filename; 189 String[] itemNumbers = new String[4]; 190 filename = textField.getText(); 191 int i=0; 192 int found = 0; 193 194 itemNumbers[0] = itemboxtest1.getText(); 195 itemNumbers[1] = itemboxtest2.getText(); 196 itemNumbers[2] = itemboxtest3.getText(); 197 itemNumbers[3] = itemboxtest4.getText(); 198 199 for(i=0; i<4; i++){ 200 found = filename.indexOf("%d",found); 201 if( found != 0 ){ 202 filename = filename.replaceFirst("%d",itemNumbers[i]); 203 } 204 } 205 return filename; 206 } 207 208 209 public void windowDeactivated(WindowEvent we) { System.out.println("windowClosing"); 210 211 } 212 public static void main(String[] args) { 213 new MainInit(); 214 } 215 216 @Override 217 public void mouseClicked(MouseEvent e) { 218 } 219 220 221 222 223 @Override 224 public void mousePressed(MouseEvent e) { 225 startPoint = e.getPoint(); 226 227 } 228 229 230 231 232 @Override 233 public void mouseReleased(MouseEvent e) { / 234 endPoint = e.getPoint(); 235 afterProcess(); 236 237 } 238 239 240 241 242 @Override 243 public void mouseEntered(MouseEvent e) { 244 245 } 246 247 248 249 250 @Override 251 public void mouseExited(MouseEvent e) { 252 253 254 } 255 public void beforeProcess() { 256 257 x = mainFrame.getX(); 258 y = mainFrame.getY(); 259 mainFrame.setLocation(-1000,-1000); 260 261 262 JFrame.setDefaultLookAndFeelDecorated(false); 263 mainFrame2 = new JFrame(); 264 mainFrame2.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 265 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 266 mainFrame2.setSize(screenSize.width, screenSize.height); 267 JPanel p = new JPanel(); 268 p.setBackground(new Color(.5f,.5f,.5f,.5f)); 269 mainFrame2.getContentPane().add(p); 270 271 mainFrame2.setLocationRelativeTo(null); 272 mainFrame2.setUndecorated(true); 273 274 com.sun.awt.AWTUtilities.setWindowOpaque(mainFrame2, false); //半透明化 275 mainFrame2.addMouseListener(this); 276 mainFrame2.addMouseMotionListener(this); 277 mainFrame2.setVisible(true); 278 279 } 280 281 public void afterProcess() { 282 mainFrame2.dispose(); 283 File filepath = FilePathCreate(); 284 try { 285 screenShot.screenCapture(filepath,startPoint,endPoint); 286 } catch (AWTException e1) { 287 // TODO 自動生成された catch ブロック 288 e1.printStackTrace(); 289 } catch (IOException e1) { 290 // TODO 自動生成された catch ブロック 291 e1.printStackTrace(); 292 } 293 // 自分を表示(元の位置に移動) 294 mainFrame.setLocation(x, y); 295 } 296 297 298 299 300@Override 301public void mouseDragged(MouseEvent e) { 302 303} 304 305 306 307 308@Override 309public void mouseMoved(MouseEvent e) { 310 311} 312 313} 314 315 316 317 318
ScreenShot
lang
1 2public class ScreenShot { 3 4 public void screenCapture(File filepath, Point startPoint, Point endPoint) throws AWTException, IOException { 5 Robot robot = new Robot(); 6 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 7 BufferedImage image = robot.createScreenCapture( 8 new Rectangle( (int)startPoint.getX(), 9 (int)startPoint.getY(), 10 (int )(endPoint.getX() - startPoint.getX()), 11 (int)(endPoint.getY() - startPoint.getY()))); 12 ImageIO.write(image, "PNG", filepath); //PNGファイルの保存 13 } 14} 15
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/16 00:58 編集
2015/07/16 06:24
2015/07/16 07:34
2015/07/16 09:05
2015/07/17 01:51 編集
2015/07/17 01:48
2015/07/17 02:07
2015/07/17 02:09
2015/07/17 02:59
2015/07/17 04:14
2015/07/17 04:39
2015/07/21 00:38
2015/07/21 01:17
2015/07/21 01:54 編集
2015/07/21 02:37
2015/07/21 02:43
2015/07/22 07:36
2015/07/22 08:10
2015/07/22 08:41