簡體   English   中英

Java ImageIO:如何從文件讀取BufferedImage,以便它使用DataBufferFloat?

[英]Java ImageIO: How can I read a BufferedImage from file, so that it uses DataBufferFloat?

我需要從文件中讀取BufferedImage ,該文件不使用DataBufferInt (通常),而是使用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);

createPackedRaster不適合此操作。 它使用SinglePixelPackedSampleModel創建一個Raster ,該Raster將r / g / b / 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>());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM