Я работаю над проектом SWT, но я буду активно работать с Awt.Robot.createScreenCapture()
для создания изображений BufferedImages. У меня будут сотни - тысячи изображений, сгенерированных таким образом.
Проблема в том, что SWT не может отображать BufferedImages и имеет свой собственный класс Image
. Я знаю, что можно преобразовать BufferedImages в изображение SWT, но изображения SWT, похоже, нужно удалять вручную и не имеют автоматической сборки мусора, как это было бы в BufferedImage Swing.
Кроме того, я полагаю, что компьютеру потребуется время / усилия для постоянного преобразования из BufferedImage в изображение, что, вероятно, может замедлить мою программу, что неприемлемо, поскольку это критичное по времени приложение.
Итак, есть ли способ показать BufferedImages в SWT Shell
? (У меня, вероятно, будет Jpanel
, показывающий изображение для каждого из изображений, поэтому мне просто нужен способ показать JPanel на Shell
.)
1 ответ
Я попробовал SWT / AWT Bridge, как было предложено в комментарии к вашему вопросу, и он работает, как ожидалось:
static BufferedImage bim;
static Frame frame;
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
final java.awt.Rectangle screenRect = new java.awt.Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
bim = new Robot().createScreenCapture(screenRect);
frame.repaint();
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).start();
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
shell.setSize(200, 200);
Composite composite = new Composite(shell, SWT.EMBEDDED | SWT.NO_BACKGROUND);
frame = SWT_AWT.new_Frame(composite);
frame.setLayout(new BorderLayout());
frame.add(new JPanel() {
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(bim, 0, 0, this);
}
}, BorderLayout.CENTER);
frame.setVisible(true);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
Ура
BufferedImageContainer
или такой класс, который я могу просто многократно добавлять в свои shell
(и вызывать setImage(myBufferedImage)
для установки изображения?)
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.