java - SWT 图像连接或平铺/马赛克

标签 java eclipse swt eclipse-pde

我有一个 Eclipse RCP 应用程序,它可以显示很多(10k+)个彼此相邻的小图像,就像胶片一样。对于每个图像,我都使用了一个 SWT Image 对象。这会使用过多的内存和资源。我正在寻找一种更有效的方法。我考虑过获取所有这些图像并通过创建一个具有适当总宽度、连接宽度(具有恒定高度)的 ImageData 对象并将它们连接起来,并使用 setPixel() 作为其余的像素。但是,ImageData 构造函数中使用的 Palette 我无法理解。

我还搜索了 SWT 平铺或马赛克功能以从一组图像中创建一个图像,但一无所获。

有什么想法可以有效地并排显示数千张小图像吗?请注意,一旦显示图像,就不会对其进行处理,因此这是一次性成本。

最佳答案

您可以直接在新(大)图像的 GC(图形上下文)上绘制。拥有一个大图像应该比数千个小图像导致更少的资源使用(SWT 中的每个图像都保留一些操作系统图形对象句柄)

你可以尝试的是这样的:

        final List<Image> images;
        final Image bigImage = new Image(Display.getCurrent(), combinedWidth, height);
        final GC gc = new GC(bigImage);
        //loop thru all the images while increasing x as necessary:
        int x = 0;
        int y = 0;
        for (Image curImage : images) {
            gc.drawImage(curImage, x, y);
            x += curImage.getBounds().width;
        }
        //very important to dispose GC!!!
                    gc.dispose();
        //now you can use bigImage

关于java - SWT 图像连接或平铺/马赛克,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/273711/

相关文章:

java - 当理论规定使用已检查异常时,我是否应该使用相关的内置未检查异常?

java - main 方法中的编译错误

java - 将 SimpleEntry 添加到 SortedMap

java - 创建 App Engine 连接的 Android 项目

java - 如何在 SWT 中禁用系统托盘图标的上下文菜单?

java - 如何将 Apache-Solr 服务器作为后台进程运行?

java - 编译报告java源文件时出错

java - char[] 转换为 ascii 和十进制值( double )java

java - Jruby+swt。无法在亚马逊服务器上执行应用程序

java - 在另一个模态 JFace 对话框之上打开模态 JFace 对话框