2016-10-05 5 views
0

JPanel의 배경 화면을 캡처하려하지만 이미지를 저장 한 후 검정색 이미지가 나타납니다.JPanel 위치 및 크기를 기준으로 스크린 샷

여기에 코드입니다 :

private void takeScreenshot(String print){ 
     JFileChooser c = new JFileChooser(getRealDesktop()); 
     FileFilter jpg = new FileNameExtensionFilter(".jpg", ImageIO.getReaderFileSuffixes()); 
     FileFilter jpeg = new FileNameExtensionFilter(".jpeg", ImageIO.getReaderFileSuffixes()); 
     FileFilter png = new FileNameExtensionFilter(".png", ImageIO.getReaderFileSuffixes()); 
     c.setFileFilter(png); 
     c.setFileFilter(jpeg); 
     c.setFileFilter(jpg); 
     c.showSaveDialog(this); 
     if(c.getSelectedFile() != null){ 
      String ssLoc = c.getSelectedFile().getAbsolutePath()+c.getFileFilter().getDescription(); 
      System.out.println(ssLoc); 
      BufferedImage bufImg = new BufferedImage(ssWindow.getSize().width, ssWindow.getSize().height,BufferedImage.TYPE_INT_RGB); 
      ssWindow.paint(bufImg.createGraphics()); 
      File imageFile = new File(ssLoc); 
      try{ 
       imageFile.createNewFile(); 
       ImageIO.write(bufImg, "JPG", imageFile); 
      }catch(Exception ex){ 
       System.err.println(ex); 
      } 
     } 
    } 

그리고 언론의 동작 버튼은 다음과 같습니다

this.setVisible(false); 
takeScreenshot("ssTake"); 
this.setVisible(true); 

어떻게이 일을 할 수 있습니까?

+0

귀하의 코드가 JPanel의 내부에서 이미지를 만드는 것입니다. JPanel에서 화면 좌표를 가져와 화면의 내용을 찍어야합니다. 내 이클립스에 복사 할 수있는 코드와 ** execute **를 게시하지 않았으므로 코멘트 만 남겨두면됩니다. –

+0

내 JCropFrame 기사 (http://java-articles.info/articles/?p=76)를 확인하십시오. –

답변

1

감사합니다. Gilbert Le Blanc.

나는이를 위해 로봇을 사용하는 것이 조금에게 코드를 재 이제 코드는 다음과 같습니다

private void takeScreenshot(String print){ 
     JFileChooser c = new JFileChooser(getRealDesktop()); 
     FileFilter jpeg = new FileNameExtensionFilter("JPEG (*.jpg;*.jpeg;*.jpe;*.jfif)", "jpg", "jpeg", "jpe", "jfif"); 
     c.setFileFilter(jpeg); 
     c.showSaveDialog(this); 
     if(c.getSelectedFile() != null){ 
      ssLoc = c.getSelectedFile().getAbsolutePath()+".jpg"; 
      try { 
       Thread.sleep(150); 
       Robot robot = new Robot(); 
       BufferedImage screenShot = robot.createScreenCapture(new Rectangle(ssWindow.getX(),ssWindow.getY(),ssWindow.getWidth(),ssWindow.getHeight())); 
       ImageIO.write(screenShot, "JPG", new File(ssLoc)); 
       System.out.println(print); 
      } catch (AWTException | IOException | InterruptedException ex) { 
       Logger.getLogger(MainGUI.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
    }