2010-02-17 4 views
1

J'ai besoin de lire un BufferedImage à partir du fichier, qui n'utilise pas DataBufferInt (comme normalement), mais DataBufferFloat.Java ImageIO: Comment puis-je lire un fichier BufferedImage à partir d'un fichier afin qu'il utilise DataBufferFloat?

S'il vous plaît noter: Je ne tout simplement pas besoin d'une DataBufferFloat autonome, mais vraiment un BufferedImage avec DataBufferFloat sous-jacente.

L'API autour de ces choses est très complexe, je ne trouve tout simplement pas comment faire cela.

Aidez-nous s'il vous plaît.


EDIT
trouvé ce qui est pas travail:

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); 

Répondre

0

createPackedRaster ne convient pas à ce sujet. Il crée un Raster avec un SinglePixelPackedSampleModel, qui stocke r/g/b/valeurs dans un champs de bits dans un int, de sorte que son transferType ne peut être un type intégral.

Vous voulez probablement une trame générique avec un PixelInterleavedSampleModel par exemple

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>()); 
Questions connexes