2010-02-17 39 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>()); 
相關問題