创建TIFF映像时发生Java堆空间错误

创建TIFF映像时发生Java堆空间错误,java,tiff,jai,geotiff,Java,Tiff,Jai,Geotiff,由于我是JAI处理TIFF的新手,我正在尝试使用浮点数据创建6000*6000的RGB TIFF图像。实际上,该代码适用于5000*5000图像,但当我增加大小时,在第tileImage.setData(pattern)行出现Java堆空间错误 请告诉我,使用平铺概念创建RGB/多波段RIFF图像是否正确。还是有什么办法可以创造 错误: 线程“main”java.lang.OutOfMemoryError中的异常:java堆空间 位于java.awt.image.DataBufferFloat。

由于我是JAI处理TIFF的新手,我正在尝试使用浮点数据创建6000*6000的RGB TIFF图像。实际上,该代码适用于5000*5000图像,但当我增加大小时,在第
tileImage.setData(pattern)行出现Java堆空间错误

请告诉我,使用平铺概念创建RGB/多波段RIFF图像是否正确。还是有什么办法可以创造

错误: 线程“main”java.lang.OutOfMemoryError中的异常:java堆空间 位于java.awt.image.DataBufferFloat。(DataBufferFloat.java:53) 位于java.awt.image.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:409) 位于javax.media.jai.RecyclingTileFactory.createTile(RecyclingTileFactory.java:397) 位于javax.media.jai.PlanarImage.createWritableRaster(PlanarImage.java:1995) 位于javax.media.jai.TiledImage.createTile(TiledImage.java:998) 位于javax.media.jai.TiledImage.getWritableTile(TiledImage.java:1118) 位于javax.media.jai.TiledImage.setData(TiledImage.java:1241) 位于javaapplication17.Test3.main(Test3.java:69) Java结果:1
守则:
公共类Test3{
公共静态void main(字符串a[]{
int imageHeight=6000;
int imageWidth=6000;
可写光栅;
int[]带偏移量=新的int[3];
带偏移量[0]=2;
带偏移量[1]=1;
带偏移量[2]=0;
PixelInterleavedSampleModel sm=新的PixelInterleavedSampleModel(DataBuffer.TYPE_FLOAT,imageWidth,imageHeight,3,3*6000,带宽偏移);
//原点是0,0。
WritableRaster模式=光栅。createWritableRaster(sm,新点(0,0));
浮动[]带值=新浮动[3];
波段值[0]=90;
波段值[1]=45;
波段值[2]=45;
//设置图案光栅的值。
对于(int y=0;y
简单的解决方案是使用-Xmx选项增加堆大小。

感谢您的快速响应…事实上,我制作了-Xmx1024m。即使它不起作用。当我尝试进一步增加时,我收到一个错误,说jvm无法识别类似的东西…您似乎没有出现错误,因此,唯一的解决方案是增加最大堆大小。如果您有32位JVM,最大值可能是1.2 GB的
-mx1200m
,但如果您有64位JVM,实际限制是主内存大小。除了更改硬件/OS配置以允许您使用更大的堆之外?我不知道,“等待你有价值的建议……”1)不要在国际论坛上使用愚蠢的、虚构的词语。这个词就是“你的”。2) 修好那把粘糊糊的“.”钥匙。3) 对输入/输出(例如stacktrace)和代码使用代码格式。
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at java.awt.image.DataBufferFloat.<init>(DataBufferFloat.java:53)
        at java.awt.image.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:409)
        at javax.media.jai.RecyclingTileFactory.createTile(RecyclingTileFactory.java:397)
        at javax.media.jai.PlanarImage.createWritableRaster(PlanarImage.java:1995)
        at javax.media.jai.TiledImage.createTile(TiledImage.java:998)
        at javax.media.jai.TiledImage.getWritableTile(TiledImage.java:1118)
        at javax.media.jai.TiledImage.setData(TiledImage.java:1241)
        at javaapplication17.Test3.main(Test3.java:69)
Java Result: 1
public class Test3 {

    public static void main(String a[]) {
        int imageHeight = 6000;
        int imageWidth = 6000;
        WritableRaster raster;
        int[] bandOffsets = new int[3];
        bandOffsets[0] = 2;
        bandOffsets[1] = 1;
        bandOffsets[2] = 0;
        PixelInterleavedSampleModel sm = new PixelInterleavedSampleModel(DataBuffer.TYPE_FLOAT, imageWidth, imageHeight, 3, 3 * 6000, bandOffsets);
// Origin is 0,0.
        WritableRaster pattern = Raster.createWritableRaster(sm, new Point(0, 0));
        float[] bandValues = new float[3];
        bandValues[0] = 90;
        bandValues[1] = 45;
        bandValues[2] = 45;
       // Set values for the pattern raster.
        for (int y = 0; y < pattern.getHeight(); y++) {
            for (int x = 0; x < pattern.getWidth(); x++) {
                pattern.setPixel(x, y, bandValues);
                bandValues[1] = (bandValues[1] + 1) % 255;
                bandValues[2] = (bandValues[2] + 1) % 255;
            }
        }
        ColorModel colorModel = PlanarImage.createColorModel(sm);

        // Create a TiledImage using the SampleModel.
        TiledImage tiledImage = new TiledImage(0, 0, imageWidth, imageHeight, 0, 0, sm, colorModel);
        // Set the data of the tiled image to be the raster.
        tiledImage.setData(pattern);
        // Save the image on a file.
           JAI.create("filestore", tiledImage, "rgbpattern_test4.tif", "TIFF");
    }
}