簡単な答え: はい、できます
バッファリングされた Image で作成された Graphics2D オブジェクトは、イメージを認識していますが、それをユーザーに返そうとはしません。リフレクションを使用しても構わない場合は、それを盗むことができます (リフレクション)。次のコードは、このアプローチを示しています。
public class Graphics2DReflector {
public static void main(String[] args) {
// prepare the Graphics2D - note, we don't keep a ref to the image!
final Graphics2D g2d =
new BufferedImage(100,100,BufferedImage.TYPE_INT_RGB).createGraphics();
g2d.drawString("Reflected", 10, 50);
JFrame frame = new JFrame("Reflected Image");
// one Panel to show the image only known by g2d
frame.getContentPane().add(new Panel() {
@Overwrite
public void paint(Graphics g) {
try {
SurfaceData data = ((SunGraphics2D) g2d).surfaceData;
Field bufImg = BufImgSurfaceData.class.getDeclaredField("bufImg");
bufImg.setAccessible(true);
BufferedImage image = (BufferedImage) bufImg.get(data);
g.drawImage(image,0,0,null);
} catch (Exception oops) {
oops.printStackTrace();
}
}
});
frame.setSize(200,200);
frame.setVisible();
}
}
注: これは一部の Sun/Oracle クラスに依存し、すべての Java VM で機能するとは限りません。少なくともアプローチを示しており、実際のクラスを調べてフィールドを取得する必要がある場合があります。