0

こんにちは私はメモリにheightDataを持っています、そして時々(私がそれを編集するとき)私はそれをjpgに保存したいです。これは私のコードです:

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は黒だけです。:/それはそれを行う良い方法ですか、それとも何かが間違っていますか?

4

2 に答える 2

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;
于 2012-05-02T20:09:46.293 に答える
1

JPG は損失の多い形式であるため、おそらく高さマップを保存するのに適した形式ではありません。BMP pr PNGに入れる必要があります。では、あなたの「身長」の範囲は?あなたの高さは浮動小数点数のようです。つまり、表示するのに適切な範囲にないか、個別の値に変換することさえできない可能性があります。

許可されている高さの範囲が Xf から Yf の場合、次を使用してそれを 0 ~ 255 の範囲に変換します。

byteValue = (バイト)(((OldValue - OldMin) * (255 - 0)) / (OldMax - OldMin)) + 0

そして、それを試してみてください。

于 2012-05-02T20:09:25.100 に答える