gpt4 book ai didi

java - 如何在 SWT 项目中显示 BufferedImages?

转载 作者:行者123 更新时间:2023-11-30 11:28:25 25 4
gpt4 key购买 nike

我正在从事一个 SWT 项目,但我将广泛使用 Awt.Robot.createScreenCapture() 来生成 BufferedImages。我将以这种方式生成成百上千张图像。

问题是,SWT 似乎不能显示 BufferedImages ,并且有它自己的 Image 类。我知道可以将 BufferedImages 转换为 SWT 的图像,但 SWT 的图像似乎需要手动处理并且没有像 Swing 的 BufferedImage 那样的自动垃圾收集。

另外,我认为计算机不断地从 BufferedImage 转换为 Image 需要花费时间/精力,这可能会减慢我的程序的速度,这作为时间关键型应用程序是 Not Acceptable 。

那么,有没有办法在 SWT Shell 上显示 BufferedImages? (我可能会有一个 Jpanel 来显示每个图像的图像,所以我只需要一种方法来将 JPanel 显示到 Shell 上。)

最佳答案

我按照对您问题的评论中的建议尝试了 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();
}

干杯

关于java - 如何在 SWT 项目中显示 BufferedImages?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18864921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com