创建TIFF映像时发生Java堆空间错误
由于我是JAI处理TIFF的新手,我正在尝试使用浮点数据创建6000*6000的RGB TIFF图像。实际上,该代码适用于5000*5000图像,但当我增加大小时,在第创建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。
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");
}
}