Java-апплет для BufferedImage

Я создал JFrame, который загружает внешний апплет для такой игры:

//Setup everything for the Stub.. Below adds the stub to the applet and creates it.
DownloadFile(new URL(World + "/" + Archive), "./gamepack.jar");
CAppletStub Stub = new CAppletStub(new URL(World), new URL(World), this.Parameters);
applet = (Applet) new URLClassLoader(new URL[] {new URL(World.toString() + "/" + Archive)}).loadClass("Rs2Applet").newInstance();

applet.setStub(Stub);
applet.init();
applet.start();
applet.setPreferredSize(new Dimension(Width, Height));
Frame.getContentPane().add(applet);

Я пытаюсь сделать скриншот этого апплета или заставить его нарисовать свою поверхность в BufferedImage. Я попытался создать подкласс «Applet» и привести свой URLClassLoader к этому классу, но он не может выполнить преобразование, что имеет смысл.

Как я могу захватить все, что апплет отображает в изображение?


person Brandon    schedule 14.04.2013    source источник
comment
Чтобы быстрее получить помощь, опубликуйте SSCCE.   -  person Andrew Thompson    schedule 15.04.2013


Ответы (2)


Это работает для любого компонента, а не только для апплетов:

public static BufferedImage toBufferedImage(Component component) {
    BufferedImage image = new BufferedImage(component.getWidth(), 
        component.getHeight(), BufferedImage.TYPE_INT_RGB);
    Graphics g = image.getGraphics();
    component.paint(g);
    return image;
}
person Pino    schedule 14.04.2013
comment
Вы должны удалить объект Graphics после того, как закончите рисовать: g.dispose() - person gcvt; 14.04.2013
comment
Это создает черное изображение при использовании с апплетом: S - person Brandon; 14.04.2013
comment
@gcvt: Нет, в Javadoc Graphics.dispose() говорится, что объекты Graphics, которые предоставляются в качестве аргументов для методов рисования и обновления компонентов, автоматически освобождаются системой при возврате этих методов. - person Pino; 15.04.2013
comment
@CantChooseUsernames: я только что протестировал его с апплетом и JApplet, запущенным appletviewer: он работает, проверьте еще раз или опубликуйте свой код. - person Pino; 15.04.2013

Я использую Screen Image для обычных приложений Swing. Не знаю, вызывает ли загрузка апплета в JFrame какие-либо проблемы.

person camickr    schedule 14.04.2013