我有一个字节数组对应于数据类型unsigned short的像素值(由C ++应用程序编写)。我需要将这些值转换为BufferedImage并显示或保存它。
我正在使用以下循环:
int xsize=1024;
int ysize=1024;
for (int i = 0; i < bandCount; i++)
{
ints[i]=new int[pixels];
for(int j=0;j<pixels*2;j+=2)
{
short temp=bands[i].getShort(index);
ints[i][index]=(temp&0xffff);
index++;
}
}
imgBuffer = new DataBufferInt(ints, pixels);
buffer_type = DataBuffer.TYPE_INT;
sampleModel = new BandedSampleModel(buffer_type, xsize, ysize,
xsize, banks, offsets);
data_type = BufferedImage.TYPE_USHORT_GRAY;
}
WritableRaster raster = Raster.createWritableRaster(sampleModel,
imgBuffer, null);
BufferedImage img = new BufferedImage(xsize, ysize, data_type);
img.setData(raster);
其中像素只是图像的宽度*高度。 bands []是包含像素值的ByteBuffer。我在下一个简短的内容中读取它,并将其转换为int值,并在循环之后,创建这些int值的DataBuffer。 然后我尝试从转换的像素值创建BandedSampleModel。 DataBuffer类型是INT(我认为),BufferedImage设置为USHORT_GRAY。
我认为图像看起来很可怕 - 它正在跳过其他所有像素。我已经尝试更改BufferedImage类型(上面的data_type),但是没有32位灰度选项。我尝试过使用TYPE_INT_ARGB并得到一个异常,说明BufferedImage上的setData正在使用越界索引(1024)。图像远大于1024x1024;我将xsize和ysize锁定到这些值,以减少产生错误所花费的时间。
我有点超出我的深度;如何使用无符号短像素值数组创建BufferedImage?我是否在循环中错误地读取了像素值,或者我只是错误地设置了DataBuffer或BufferedImage类型?
谢谢!