2012-01-19 36 views
1

我目前正在製作全屏遊戲,我希望能夠拍攝一些截圖。 我發現這個小的代碼片段:ScreenShot解決方案需要我的桌面屏幕

BufferedImage image = 
new Robot().createScreenCapture(new Rectangle(w.getX(), w.getY(),w.getWidth(),w.getHeight())); 

ImageIO.write(image, "jpg", new File("C:\\Users\\Kaizer\\Desktop\\", "ScreenShot"    + counter + ".jpg")); 

我知道它沒有看起來很漂亮,但它使一個截圖,但是從我的桌面,而不是我的實際全屏遊戲。 Windows屏幕截圖也一樣。

我知道我忽略了一些東西,但是我無法想象它爲了我的生活。

順便說一句:這段代碼在玩家按下F11按鈕時運行。這不是它自己的方法。

回答

1

如果你寫你的遊戲與Swing或AWT,而不是使用Robot,你可以做到以下幾點:

private static void captureImage(Component c, String fileName) 
     throws IOException { 
    BufferedImage img = new BufferedImage(c.getWidth(), c.getHeight(), 
      BufferedImage.TYPE_INT_RGB); 
    c.paint(img.getGraphics()); 

    ImageIO.write(img, "jpg", new File(fileName + ".jpg")); 
} 

注:根據您所使用的Component,它可能會或可能不會需要可見。但是當你從一款遊戲中拍攝照片時,我很確定這並不重要。

+0

我會盡量玩這個。但什麼組件將需要?實際的JFrame? – Kaizer

+0

EDIT ---------------------------- 嘗試了這與JFrame,但它只是一個白色的屏幕,認爲這可能是我正在使用忽略重繪,並使用雙緩衝和update()和draw()。 在保存圖像之前,我試圖關閉忽略重新繪製,然後在保存圖像後再次打開它。但仍然只有白屏。 – Kaizer

+0

AHA。我知道了。我只需要將從c.paint調用的方法更改爲draw方法。謝謝一堆。 :) – Kaizer

0

從我的桌面,而不是我的實際全屏遊戲..

這是典型的Robot(或標準OS截圖軟件)的當遊戲進行主動渲染。 AFAIU沒有什麼可以做到的(超越 - 用你的手機相機抓取你的截圖)。