2016-05-19 17 views
-2

是否有可能將雙二維值寫入緩衝圖像,而無需在Java中進行任何類型的轉換?我有一個雙值的二維矩陣。我希望把它寫成圖像,但是在緩衝圖像中只能寫入整數值。最後我必須能夠讀取那些圖像的雙重值。有任何想法嗎 ??幫我出如何在緩存的圖像中寫入雙值

+1

詢問家庭作業幫助的問題必須包括您迄今爲止解決問題所做的工作摘要,以及您解決問題的難點描述。請參見[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 –

+2

是的,你可以。您需要創建一個由'DataBuffer.TYPE_DOUBLE'' SampleModel'和'DataBuffer'支持的自定義'BufferedImage'。不知道它是多麼有用,但至少非常可行。 'double'值可以通過'DataBuffer'的後備數組直接訪問。 – haraldK

+0

感謝您的幫助#haraldK先生。我會試試這個 –

回答

1

當然可以,但首先你必須創建一個BuffuredImage類型DataBufferDouble的DataBuffer中:

public static BufferedImage Double(int width, int height, int channel) 
    { 
    ColorSpace myColorSpace = new FloatCS(channel == 1 ? ColorSpace.TYPE_GRAY : ColorSpace.TYPE_RGB, channel) ; 

    ColorModel myColorModel = new ComponentColorModel(myColorSpace,null,false,false,ColorModel.OPAQUE,DataBuffer.TYPE_DOUBLE) ; 

    return new BufferedImage(myColorModel, myColorModel.createCompatibleWritableRaster(width, height), false, null) ; 
    } 

然後你訪問使用柵格或直接與DataBuffer中的像素,但不是的getRGB。

+0

謝謝@FiReTiTi。你能解釋我如何在圖像上使用它? –

+0

我剛剛給你的代碼已經是一張圖片。然後,您可以使用Raster(mymimage.getRaster())和getSample和setSample方法,或者使用DataBuffer:double [] buffer =((DataBufferDouble)my image.getRaster()。getDataBuffer())來訪問像素值。的getData() – FiReTiTi