Mapbox
提供了Global elevation data
與在PNG
圖像中編碼的高度數據。身高由height = -10000 + ((R * 256 * 256 + G * 256 + B) * 0.1)
解碼。詳情請見https://www.mapbox.com/blog/terrain-rgb/。如何獲得`PNG`圖像的正確`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
值不同的方法?哪一個是正確的? 根據以下評論,不同讀取順序和壓縮數據的統一可能會導致像素(0,0)
的rgba
的不同值。
現在我想專注於----如何將rgba(0~1)
轉換爲RGBA(0~255)
? r_ps=r_unity*255
?但是我怎樣才能解釋r=0
在統一和r=1
PS的像素在(0,0)
?
如何將單位(範圍0〜1)中的'rgba'值轉換爲PS中的相似值(範圍0〜255)?重點在於,在'(0,0)'處像素的單位'r'的值是'0'。但是在PS中,r的值是'1'。如果我用'r_PS = r_unity * 255'轉換這個值,結果似乎是無法匹配的。 – oleotiger
我同意,結果似乎完全無法匹敵。你應該能夠像你所做的那樣乘以255,但除非有一些四捨五入的情況發生,否則它不應該是0.真正令人擔憂的是B值。 '.718 * 256 = 183'這是超過179.這可能是壓縮,大衛指出,或者你可以比較不同的像素。 – code11
我設置了統一的紋理導入設置(truecolor,uncompressed,maxSize = 8192),像素'(0,0)'的'gbra'爲''RGBA(0.004,0.596,0.702,1.000)「'。這似乎工作。那麼,應該有一個類型轉換? 'r_PS = Math.Round(r_unity * 255)'? – oleotiger