XNA - 高度数据到高度映射图像

本文关键字:高度 映射 图像 数据 XNA | 更新日期: 2023-09-27 18:33:02

你好,我在内存中有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));
}

我100%确定我在heightMapColors中有数据,但保存的jpg只是黑色的。这是怎么做的好方法还是出了什么问题?

XNA - 高度数据到高度映射图像

Alpha 不应为零

     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;

JPG 可能不是存储高度图的好格式,因为它是一种有损格式。您应该将其放入BMP pr PNG中。也就是说,你的"身高"范围是多少?看起来您的身高是一个浮点数,这意味着它可能不在正确的范围内,无法显示甚至转换为离散值。

如果允许的高度范围是 Xf 到 Yf,请使用

byteValue = (byte)(((OldValue - OldMin) * (255 - 0))/(OldMax - OldMin)) + 0

然后试一试。