当前位置: 首页 > 知识库问答 >
问题:

如何在SWT项目中显示BuffereImage?

龙毅
2023-03-14

我正在做一个SWT项目,但是我将广泛使用Awt. Robot.createScreenCapture()来生成BufferedImages。我将以这种方式生成数十万张图像。

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

另外,我认为计算机要不断地从BuffereImage转换为Image需要时间/精力,这可能会减慢我的程序,这是不可接受的,因为它是一个时间关键型应用程序。

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

共有1个答案

郎魁
2023-03-14

我尝试了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();
}

干杯

 类似资料:
  • 问题内容: 这类似于我昨天提出的问题,但更具体地针对该问题。向已经包含各种小部件的NetBeans项目中添加JFreeChart的正确方法是什么?我的updateChart()隐藏了整个JFrame。我想将JFreeChart添加到JFrame中。 更正的代码: 问题答案: 我的updateChart()隐藏了整个JFrame。 那是因为您要用免费图表中的面板替换框架的内容窗格。 我不知道您使用的

  • 问题内容: 我想显示类似于java2s.com“创建惰性文件树”的文件树,但要包括实际的系统图标- 特别是对于文件夹。SWT似乎不提供此功能(Program API不支持文件夹),因此我提出了以下建议: 但是,应该透明的区域以黑色显示。我该如何工作,还是应该采用其他方法? 更新: 我认为原因完全不是为了透明。 现在,我填补与现在,这是一个可接受的解决方法。不过,我想在这里知道真正的解决方案… 问题

  • 问题内容: Maven常见的调试技术是使用mvndependency:tree查看项目依赖关系图。 但是,此列表显示项目依赖关系,而不是每个插件的插件依赖关系树。有什么办法可以从项目中做到这一点吗? 问题答案: 通过mvn -X的输出将间接打印出信息。当前没有其他选择来获取Maven-Plugin的依赖项。 更新 您可以使用以下命令获取插件依赖项列表(依赖项插件中的resolve- plugin目

  • 问题内容: 我正在做一个视图(使用Django的通用视图DeleteView)从模型中删除实例,但它会级联并从其他模型中删除实例: 我想要做的是像管理界面一样显示将要删除的相关项目的列表,例如: 问题答案: 你可以使用 Django 使用的类来确定要在级联中删除的对象。实例化它,然后调用它传递要删除的对象。它需要一个列表或查询集,因此,如果只有一个对象,只需将其放在列表中: instances_w

  • 即使SWT表格为空,是否可以始终在表格中显示垂直滚动条?通过始终显示(可能已禁用)垂直滚动条,可以避免最后一列在使用列权重数据(ColumnWeightData)进行布局时部分隐藏。 我试图用SWT初始化表。V\u滚动或使用表格。getVerticalBar()。setVisible(true)-两者均未成功。 在ScrollableComposite中有一个方法设置总是显示滚动条。我要找的是表中

  • 问题内容: 我有一个Foo类,它仅加载FXML并创建场景。 在FXML中,我将控制器设置为FooController() 然后添加一个MenuButton: 我尝试在FooController中设置menuButton: 但是,尽管为MenuButton设置了所有内容,但它并未在GUI中显示任何CheckMenuItems。 如何在FXML中定义的menuButton中加载这些项目? 问题答案: