【发布时间】:2016-12-07 12:10:59
【问题描述】:
Mapbox 为Global elevation data 提供编码在PNG 图像中的高度数据。高度由height = -10000 + ((R * 256 * 256 + G * 256 + B) * 0.1) 解码。详情在https://www.mapbox.com/blog/terrain-rgb/。
我想在Unity3D中导入高度数据生成地形。
Texture2D dem = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/dem/12/12_3417_1536.png", typeof(Texture2D));
for (int i = 0; i < width; i++)
for (int j = 0; j < height; j++)
{
Color c = dem.GetPixel(i, j);
float R = c.r*255;
float G = c.g*255;
float B = c.b*255;
array[i, j] = -10000 + ((R * 256 * 256 + G * 256 + B) * 0.1f);
}
这里我设置了一个断点,第一个像素的rgba值为RGBA(0.000, 0.592, 0.718, 1.000)。 c.r 是 0。高度不正确,因为该点代表山上某处的高度。
然后我打开Photoshop中的图片,得到第一个像素的RGB:R=1,G=152,B=179。
我在C#写了一个测试程序。
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap("12_3417_1536.png");
Color a = bitmap.GetPixel(0, 0);
它显示Color a 是(R,G,B,A)=(1,147,249,255)
为什么我用不同的方法得到不同的RGBA 值?哪一个是正确的?
根据下面的cmets,不同的读取顺序和统一压缩的数据可能会导致(0,0)处的像素rgba的值不同。
现在我要重点关注----如何将rgba(0~1) 转换为RGBA(0~255)?
r_ps=r_unity*255?但是我怎么能解释r=0统一和r=1像素PS(0,0)
?
【问题讨论】:
标签: image unity3d colors rgb mapbox