如何创建大型SWT图像?

5

在我的eclipse-rcp应用程序中,我需要创建一个尺寸为30000x10000像素或更大的图像。这个图像是NatTable的表示。使用标准的图像创建方法会出现不同的问题:OutOfMemory、SWTError - IllegalArgument或者我的PC停止响应(顺便说一句,它是Windows 7,64位,4 RAM - 客户端使用速度更慢的笔记本电脑,但是仍然需要创建图片)。下面是一个代码片段:

private Image getNattableImageRepresentation(final Display display) {
        final Rectangle totalGridArea = getTotalGridArea(); //this returns Rectangle(0,0,30000,10000)
        setGridLayerSize(totalGridArea);
        final Image nattableImage = new Image(display, totalGridArea);
        final GC nattableGC = new GC(nattableImage);
        gridLayer.getLayerPainter().paintLayer(gridLayer, nattableGC, 0, 0, totalGridArea, configRegistry);//nattable API, which draws an image into a specified gc
        restoreGridLayerState();
        return nattableImage;
    }
    return null;
}

有没有什么技巧可以创建如此巨大的图像或者可能使用API?Java高级影像API是否适用于此目的?

欢迎提出任何建议。


你想把表格保存为图片文件吗? - Sorceror
这篇文章在我遇到一些图像问题时总是对我有所帮助 - SWT 图像资源 - Sorceror
谢谢您的文章,我一定会仔细阅读。不,我不需要将表保存到文件中,实际上我需要获取一个ImageData对象,以便使用PaperClips ImagePrint打印NatTable。因此,我需要打印表格。 - Alex K.
2
ImageMagick(http://www.imagemagick.org/script/montage.php?ImageMagick=6gtf7marm2do5071dhvlln8lr2)是一个非常好用的图像处理工具,新的CG绝对不是唯一的选择。你有什么与打印相关的问题吗?如果你把所有的备用图像合并成一个大图像,就不会有任何问题了。 - Sorceror
谢谢,但我怀疑它在我的情况下可能没有用处。我甚至仔细查看了ImagiMagic,并认为它无法使用。首先,它有16Gb,而且它是特定于操作系统的,我们无法为所有应用程序安装提供它(很遗憾,Java无法处理那些大型图纸..)。 - Alex K.
显示剩余7条评论
2个回答

1

ImageMagick 是一个很棒的图像处理工具,就像这样。新的 CG 不是解决问题的方法,如果你将所有的备用图像合并成一个大图像,就不会有任何问题了。


1
合成功能正常工作,但似乎消耗了相当多的内存。我尝试使用ImageMagick的im4java接口,但这不应该是原因。当合成图像重新加载到应用程序中时,Java仍然无法处理它。图像只有10Mb(15000x400),但它会出现SWT错误,这很遗憾。 - Alex K.
1
这绝对不仅仅是10MB(虽然它是压缩的),每个32位有15000x400 = 6M像素,但每个图像都有巨大的开销,特别是当SWT使用一些平台相关的句柄时...但你是对的,无论如何这很遗憾... - Sorceror

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接