2012-06-12 15 views
6

Java tabanlı ekran görüntüsü uygulaması yapıyorum ve klavyenizdeki tuşların birleşimini ittiğiniz zaman this video gibi bir alan seçtiğinizde ve istediğiniz alanda gerçekleşiyor. ekran ve seçilen alanın ekran görüntüsünü alır.Fare kullanarak yakalamak için bir alan seçin

Fare kullanarak yakalanacak alan nasıl seçilir?

+0

Screen Capture Rectangle

Sadece özel imleci ekleme işlemini tamamladıktan. Ekranı seçebilmeye nasıl başlayacağımı bilmiyorum. –

+0

Bu sorunu çözmek için çaba sarfetme çabalarınızda ne yaptınız? – Jeffrey

+1

Şu an bunu yapmanın nasıl olduğuna dair bir ipucu için en az 3 gün aradım. Bir tane bulamadım, bu yüzden bu soruyu yayınlamaya karar verdim. –

cevap

16

Başlat.

import java.awt.*; 
import java.awt.event.*; 
import java.awt.image.*; 
import javax.swing.*; 

/** Getting a Rectangle of interest on the screen. 
Requires the MotivatedEndUser API - sold separately. */ 
public class ScreenCaptureRectangle { 

    Rectangle captureRect; 

    ScreenCaptureRectangle(final BufferedImage screen) { 
     final BufferedImage screenCopy = new BufferedImage(
       screen.getWidth(), 
       screen.getHeight(), 
       screen.getType()); 
     final JLabel screenLabel = new JLabel(new ImageIcon(screenCopy)); 
     JScrollPane screenScroll = new JScrollPane(screenLabel); 

     screenScroll.setPreferredSize(new Dimension(
       (int)(screen.getWidth()/3), 
       (int)(screen.getHeight()/3))); 

     JPanel panel = new JPanel(new BorderLayout()); 
     panel.add(screenScroll, BorderLayout.CENTER); 

     final JLabel selectionLabel = new JLabel(
       "Drag a rectangle in the screen shot!"); 
     panel.add(selectionLabel, BorderLayout.SOUTH); 

     repaint(screen, screenCopy); 
     screenLabel.repaint(); 

     screenLabel.addMouseMotionListener(new MouseMotionAdapter() { 

      Point start = new Point(); 

      @Override 
      public void mouseMoved(MouseEvent me) { 
       start = me.getPoint(); 
       repaint(screen, screenCopy); 
       selectionLabel.setText("Start Point: " + start); 
       screenLabel.repaint(); 
      } 

      @Override 
      public void mouseDragged(MouseEvent me) { 
       Point end = me.getPoint(); 
       captureRect = new Rectangle(start, 
         new Dimension(end.x-start.x, end.y-start.y)); 
       repaint(screen, screenCopy); 
       screenLabel.repaint(); 
       selectionLabel.setText("Rectangle: " + captureRect); 
      } 
     }); 

     JOptionPane.showMessageDialog(null, panel); 

     System.out.println("Rectangle of interest: " + captureRect); 
    } 

    public void repaint(BufferedImage orig, BufferedImage copy) { 
     Graphics2D g = copy.createGraphics(); 
     g.drawImage(orig,0,0, null); 
     if (captureRect!=null) { 
      g.setColor(Color.RED); 
      g.draw(captureRect); 
      g.setColor(new Color(255,255,255,150)); 
      g.fill(captureRect); 
     } 
     g.dispose(); 
    } 

    public static void main(String[] args) throws Exception { 
     Robot robot = new Robot(); 
     final Dimension screenSize = Toolkit.getDefaultToolkit(). 
       getScreenSize(); 
     final BufferedImage screen = robot.createScreenCapture(
       new Rectangle(screenSize)); 

     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new ScreenCaptureRectangle(screen); 
      } 
     }); 
    } 
} 
+0

Vay çok teşekkürler dostum! Çok yardımsever. Sadece bunu merak ettin mi? –

+0

Tamam kabul ettim. Tekrar teşekkürler dostum. –

+0

Bu, yalnızca çalıştırdığınız Java uygulamasının ekran görüntüsünü yakalıyorsanız çalışır. Kullanıcının masaüstünde çalışan diğer uygulamaları ele geçiremezsiniz. Swing'i kullanamayacağın anlamına gelen genel amaçlı bir ekran yakalama uygulaması istediğini sanıyordum. – chubbsondubs