2014-11-05 60 views
1

我使用Java創建了一個地圖編輯器。問題是,我對每個字節值都有步驟,所以地圖不平滑。是否可以將BufferedImage柵格數據更改爲浮點數據並在其上繪製浮點精度?Java使用浮點精度創建BufferedImage

+1

目前還不清楚你的意思是「我有每個字節值的步驟」。我不明白你想要在這裏實現什麼... – 2014-11-05 20:47:13

+0

從float到RGBA的轉換應該相對簡單,因爲你只需要將浮點的二進制表示(部分)解析爲int。但是你不會得到更平滑的,因爲你只有很多位來定義顏色。 – Turing85 2014-11-05 20:53:37

+0

對不起,我的意思是當我繪製一層設置高度的紋理時,高度例如是5釐米,而不是0.5釐米。所以每個數字(字節)的步驟都是可見的。 – bitQUAKE 2014-11-05 21:07:20

回答

3

要回答你的問題,是的,你可以創建一個浮點精度的BufferedImage。然而,這是否會幫助你解決你的問題還有點不清楚。

在任何情況下,這裏的工作實施例中的代碼,用於創建一個BufferedImagefloat精度:

public class FloatImage { 
    public static void main(String[] args) { 
     // Define dimensions and layout of the image 
     int w = 300; 
     int h = 200; 
     int bands = 4; // 4 bands for ARGB, 3 for RGB etc 
     int[] bandOffsets = {0, 1, 2, 3}; // length == bands, 0 == R, 1 == G, 2 == B and 3 == A 

     // Create a TYPE_FLOAT sample model (specifying how the pixels are stored) 
     SampleModel sampleModel = new PixelInterleavedSampleModel(DataBuffer.TYPE_FLOAT, w, h, bands, w * bands, bandOffsets); 
     // ...and data buffer (where the pixels are stored) 
     DataBuffer buffer = new DataBufferFloat(w * h * bands); 

     // Wrap it in a writable raster 
     WritableRaster raster = Raster.createWritableRaster(sampleModel, buffer, null); 

     // Create a color model compatible with this sample model/raster (TYPE_FLOAT) 
     // Note that the number of bands must equal the number of color components in the 
     // color space (3 for RGB) + 1 extra band if the color model contains alpha 
     ColorSpace colorSpace = ColorSpace.getInstance(ColorSpace.CS_sRGB); 
     ColorModel colorModel = new ComponentColorModel(colorSpace, true, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_FLOAT); 

     // And finally create an image with this raster 
     BufferedImage image = new BufferedImage(colorModel, raster, colorModel.isAlphaPremultiplied(), null); 

     System.out.println("image = " + image); 
    } 
} 

對於圖高程數據,採用了單一的條帶(bands = 1; bandOffsets = {0};)和灰度顏色空間(ColorSpace.CS_GRAY)和沒有透明可能會更有意義。

+0

你能告訴我如何直接繪製浮標嗎?當我寫這句話時,我記得Color提供了浮點值。我將這個問題標記爲回答,如果它有效:) – bitQUAKE 2014-11-06 15:13:49

+0

我不確定Java2D繪圖操作是否支持高於8位/像素分量的精度,但至少值得一試。否則,您可以使用其中一個'raster.setDataElements()'方法來訪問其原始格式的樣本。 – haraldK 2014-11-06 18:34:24