我需要將jpanel的某個區域轉換爲bufferedImage或其他格式以顯示在另一個jpanel中。現在,我只看到了將整個jpanel轉換成bufferedImage的代碼,但在我的情況下,我只需要一個jpanel內的區域。將JPanel的區域轉換爲BufferedImage
感謝
我需要將jpanel的某個區域轉換爲bufferedImage或其他格式以顯示在另一個jpanel中。現在,我只看到了將整個jpanel轉換成bufferedImage的代碼,但在我的情況下,我只需要一個jpanel內的區域。將JPanel的區域轉換爲BufferedImage
感謝
用請求的大小創建一個BufferedImage來接收圖像。
獲取用於在該圖像上繪製的Graphics2D,並讓JPanel畫上它。
JPanel panel = ...
BufferedImage image = new BufferedImage(200, 200, TYPE_INT_ARGB);
Graphics2D gg = image.createGraphics();
try {
gg.translate(-100, -20); // start point of region negated
panel.paint(gg);
} finally {
gg.dispose();
}
最簡單的很可能是Robot.createScreenCapture()
你需要從面板的座標系統轉換到屏幕座標系。見Component.getBounds()和Component.getLocationOnScreen()。
您引用的鏈接似乎是本地的,您可能想要在有人低估您的無辜錯誤之前更新該鏈接。 – 2010-01-14 18:18:35
到現在爲止,我只看到了整個的JPanel轉換成一個BufferedImage代碼,但對我來說,我需要一個JPanel的內部只是一個區域。
然後拍攝該圖像並將所需區域重新繪製成新圖像,就完成了。
奧斯卡 - 你在哪裏度過了所有的聲望?賞金? ^^ – 2010-01-14 18:33:04
每當我達到10K我重生:) – OscarRyz 2010-01-14 19:10:45
由於您已將代碼轉換爲BufferedImage
,因此您可以使用該代碼,然後在BufferedImage
上調用getSubImage
來獲取子區域。
你可能會發現你需要使用printAll(Graphics)而不是paint(Graphics)。我認爲這是這類事情的推薦方法。 – 2010-01-15 20:31:23