短い答えは:はい、あなたはバッファリングされたイメージ上で作成された
A 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では機能しない可能性があります。少なくとも、アプローチを示しているので、実際のクラスを調べてフィールドを取得する必要があるかもしれません。
は、サブイメージが()基礎となるをコピーしないことに注意してください画像データ、少なくともBufferedImageしたがって、subImage()によって取得されたImageを描画する場合は、オリジナルを変更し、target.createGraphics()。drawImage(Image img、...)を使用して実際にコピーを作成します。 – Trilarion