2012-05-02 29 views
0

你好我有內存中的heightData,有時(當我編輯它)我想保存到jpg。這是我的代碼:XNA - HeightData到heightMap img

float multi = 0.2f; 
float[,] heightData = quadTree.HeightData; 
Color[] heightMapColors = new Color[heightData.Length]; 

for (int x = 0; x < heightData.GetLength(0); x++) 
{ 
    for (int y = 0; y < heightData.GetLength(1); y++) 
    { 
     byte colorData = (byte)(heightData[x, y]/multi); 

     heightMapColors[x + y * heightData.GetLength(0)].R = colorData; 
     heightMapColors[x + y * heightData.GetLength(0)].G = colorData; 
     heightMapColors[x + y * heightData.GetLength(0)].B = colorData; 
    } 
} 

Texture2D heightMap = new Texture2D(device, heightData.GetLength(0), heightData.GetLength(1), false, SurfaceFormat.Color); 
heightMap.SetData<Color>(heightMapColors); 

using (System.IO.Stream stream = System.IO.File.OpenWrite(@"D:\test.jpg")) 
{ 
    heightMap.SaveAsJpeg(stream, heightData.GetLength(0), heightData.GetLength(1)); 
} 

我100%確定我有heightMapColors中的數據,但保存的jpg只有黑色。 :/這是一個很好的方法怎麼做或者什麼是錯的?

回答

2

阿爾法不應該是零

 heightMapColors[x + y * heightData.GetLength(0)].R = colorData; 
    heightMapColors[x + y * heightData.GetLength(0)].G = colorData; 
    heightMapColors[x + y * heightData.GetLength(0)].B = colorData; 
    heightMapColors[x + y * heightData.GetLength(0)].A = 255; 
+0

這可能不是問題,他似乎將其保存爲它(大部分)不關心阿爾法一個JPEG。 – Ani

+0

你測試過了嗎?因爲我幾乎可以肯定的是現在的事情 – Blau

+0

現在我確定...我已經測試了它......用A = 0黑色和用A = 255色... – Blau

1

JPG可能不是一個很好的格式來存儲高度圖,因爲它是一種有損格式。你應該把它放入BMP pr PNG中。那就是說,你的「身高」的範圍是什麼?它看起來像你的高度是一個浮動,這意味着它可能不在正確的範圍內顯示,甚至轉換爲離散值。

如果允許的高度範圍是XF中YF,將其轉換成一個0 - 255範圍using

的byteValue =(字節)(((的OldValue - OldMin)*(255 - 0))/(OldMax - OldMin))+ 0

然後給它一個鏡頭。