相关疑难解决方法(0)

如何创建大型SWT图像?

在我的eclipse-rcp应用程序中,我需要创建尺寸为30000x10000像素或更高的图像.此图像是NatTable表示.使用标准的图像创建方法,它失败了不同的问题:OutOfMemory,SWTError - IllegalArgument或我的电脑停止响应(顺便说一句,它的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;
}
Run Code Online (Sandbox Code Playgroud)

是否有任何技巧来创建如此巨大的图像或可能是API?Java Advanced Imaging Api适用于此目的吗?

任何建议表示赞赏.

java swt image eclipse-rcp

5
推荐指数
1
解决办法
766
查看次数

如何在Java中加载大图像

我试图在Java中加载大图像文件,如果文件太大(我已经尝试通过命令行标志增加堆大小),我收到内存错误消息.

我用以下方式加载图像:

如果图像不是tiff图像我正在使用此代码:

BufferedImage img = ImageIO.read(fileToOpen);
Run Code Online (Sandbox Code Playgroud)

如果文件是tiff,我使用此代码:

BufferedImage img = JAI.create("fileload", 
    fileToOpen.getAbsolutePath()).getAsBufferedImage();
Run Code Online (Sandbox Code Playgroud)

我的问题实际上归结为:图像处理程序(例如Photoshop)如何加载数百兆字节的文件而不会出现内存错误?

我的理解是,20MB jpeg很难加载到内存中的原因是因为在加载到BufferedImage时,例如你以未压缩的方式保存图像.因此,一种可能的解决方案是拥有一个Java类,该类是Image抽象类的子类,但以压缩形式存储数据.但这可能会有速度问题,因为运行时机器必须在绘制时解压缩数据.另一个选择是将原始未压缩数据缓存到磁盘并从那里无缝读取,但速度问题仍然存在.

那么大男孩怎么做呢?Photoshop如何在内存中加载200MB jpeg并绘制所有分辨率而没有任何明显的问题?

(最后注意:在我的应用程序中,由于速度问题,我得到我的BufferedImage后,我将其内容绘制到具有相同尺寸的VolatileImage上.这大大提高了绘图速度)

java image

4
推荐指数
1
解决办法
6575
查看次数

标签 统计

image ×2

java ×2

eclipse-rcp ×1

swt ×1