2016-05-19 8 views
-2

Gibt es eine Möglichkeit doppelte doubleD Werte in ein gepuffertes Bild zu schreiben ohne irgendeinen Typ in Java zu schreiben ?? Ich habe eine 2D-Matrix mit doppelten Werten. Ich möchte es als Bild schreiben, aber in Buffered Image können nur ganzzahlige Werte geschrieben werden. schließlich muss ich in der Lage sein, diese doppelten Werte aus diesem Bild zu lesen. irgendwelche Ideen ?? helfen Sie mirWie schreibt man doppelte Werte in das gepufferte Bild

+1

Fragen, die nach Hausaufgabenhilfe fragen, müssen eine Zusammenfassung der bisherigen Arbeit enthalten, um das Problem zu lösen, und eine Beschreibung der Schwierigkeit, die Sie bei der Lösung des Problems haben. Siehe [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (http://stackoverflow.com/help/mcve). –

+2

Ja können Sie. Sie müssen eine benutzerdefinierte 'BufferedImage' erstellen, die von' DataBuffer.TYPE_DOUBLE' 'SampleModel' und' DataBuffer' unterstützt wird. Nicht sicher, wie nützlich es ist, aber zumindest sehr machbar. Die "double" -Werte sind direkt über das Backing-Array des "DataBuffer" zugänglich. – haraldK

+0

danke für deine hilfe herr #haraldK. Ich werde das ausprobieren –

Antwort

1

Ja, Sie können, aber zuerst müssen Sie eine BuffuredImage mit Databuffer vom Typ DataBufferDouble erstellen:

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

Dann greifen Sie auf die Pixel, die das Raster oder direkt mit dem Databuffer verwenden, aber nicht getRGB.

+0

Danke @FiReTiTi. Kannst du mir bitte erklären, wie man das auf einem Bild benutzt ?? –

+0

Der Code, den ich Ihnen gerade gegeben habe, ist bereits ein Bild. Dann können Sie mit dem Raster (mymimage.getRaster()) mit den Methoden getSample und setSample auf die Pixelwerte zugreifen oder mit dem DataBuffer: double [] buffer = ((DataBufferDouble) mein image.getRaster(). GetDataBuffer()). Daten bekommen() – FiReTiTi