Java 如何在SWT项目中显示BuffereImage?
我正在从事一个SWT项目,但我将广泛使用Java 如何在SWT项目中显示BuffereImage?,java,swing,swt,awt,bufferedimage,Java,Swing,Swt,Awt,Bufferedimage,我正在从事一个SWT项目,但我将广泛使用Awt.Robot.createScreenCapture()来生成BuffereImage。我将有成百上千的图像以这种方式生成 问题是,SWT似乎不能显示BuffereImage,它有自己的Image类。我知道可以将BuffereImage转换为SWT的映像,但SWT的映像似乎需要手动处理,并且不像Swing的BuffereImage那样具有自动垃圾收集功能 另外,我认为计算机要不断地从BuffereImage转换为Image需要时间/精力,这可能会减慢
Awt.Robot.createScreenCapture()
来生成BuffereImage。我将有成百上千的图像以这种方式生成
问题是,SWT似乎不能显示BuffereImage,它有自己的Image
类。我知道可以将BuffereImage转换为SWT的映像,但SWT的映像似乎需要手动处理,并且不像Swing的BuffereImage那样具有自动垃圾收集功能
另外,我认为计算机要不断地从BuffereImage转换为Image需要时间/精力,这可能会减慢我的程序,这是不可接受的,因为它是一个时间关键型应用程序
那么,有没有办法在SWT
Shell
上显示BuffereImage?(我可能会有一个Jpanel
显示每个图像的图像,所以我只需要一种方法将Jpanel显示在Shell
上)我尝试了SWT/AWT桥,正如在对您的问题的评论中所建议的,它可以正常工作:
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();
}
干杯使用或在弹出框中显示图像。谢谢!有一个问题,如果我想展示多张这样的图片(例如4-5),我会怎么做?要制作一个可重用的
BufferedImageContainer
或这样的类,我需要做些什么才能重复地将其添加到我的shell
s中(并调用setImage(mybufferedImages)
来设置图像?“多个图像”作为同一面板上的瓷砖?我认为每个图像都应该在自己的Java框架/组合中,这样我就可以将它们放在需要的任何地方