1

我需要BufferedImage从文件中读取一个不使用DataBufferInt(通常)的文件,但是DataBufferFloat.

请注意:我不只是需要一些独立DataBufferFloat的,而是真的需要一个BufferedImage基础的DataBufferFloat

围绕这些东西的 API 非常复杂,我只是找不到如何做到这一点。

请帮忙。


编辑
发现什么不起作用

DataBufferDouble dbd = new DataBufferDouble(destWidth * destHeight * 4);

// Exception here:
// java.lang.IllegalArgumentException: Unsupported data type 5
WritableRaster wr = WritableRaster.createPackedRaster(
    dbd, destWidth, destHeight, 32, new Point(0, 0));

BufferedImage bi = new BufferedImage(ColorModel.getRGBdefault(),
    wr, false, (Hashtable<?, ?>) null);
4

1 回答 1

0

createPackedRaster不适合这个。Raster它使用 a创建 a SinglePixelPackedSampleModel,它将 r/g/b/a 值存储在 a 内的位字段中int,因此它transferType只能是整数类型。

您可能想要一个带有PixelInterleavedSampleModel例如的通用栅格

DataBufferDouble dbd = new DataBufferDouble(destWidth * destHeight * 4);

SampleModel sm = new PixelInterleavedSampleModel(DataBuffer.TYPE_DOUBLE, destWidth, destHeight, 4, destWidth * 4, new int[] {2, 1, 0, 3});

WritableRaster wr = WritableRaster.createWritableRaster(sm, dbd, null);

ColorModel cm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB), true, true, ColorModel.TRANSLUCENT, DataBuffer.TYPE_FLOAT);

BufferedImage bi = new BufferedImage(cm, wr, true, new Hashtable<Object, Object>());
于 2010-03-17T09:12:59.163 回答