2010-02-17 42 views
1

我需要从文件中读取BufferedImage,该文件不使用DataBufferInt(通常情况下),而是使用DataBufferFloatJava ImageIO:如何从文件读取BufferedImage,以便它使用DataBufferFloat?

请注意:我不只是需要一些独立的DataBufferFloat,但真的有潜在DataBufferFloatBufferedImage

围绕这些东西的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); 

回答

0

createPackedRaster不适合这个。它创建了一个RasterSinglePixelPackedSampleModel,它在int内的位字段中存储r/g/b/a值,所以它的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>()); 
相关问题