2012-05-02 8 views
0

こんにちは私はheightDataをメモリに持っていますが、時には(編集すると)jpgに保存します。これは私のコードです:XNA - HeightData to 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)); 
} 

私はheightMapColorsのデータを持っていることを100%確信していますが、保存された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に入れなければなりません。それは、あなたの「身長」の範囲は何ですか?あなたの身長は浮動小数点のように見えます。これはおそらく、正しい範囲に表示されていないか、離散値に変換されている可能性が高いことを意味します。

あなたの許可高さ範囲がYfのにXfのであれば、0にそれを変換 - 255の範囲using

対応するByteValue =(バイト)(((OldValueプロパティ - OldMin)*(255 - 0))/(OldMax - OldMin))+ 0

それからショットをつけてください。