爲什麼在我加載外部的時候使用Unity RGBA32 .png(通過PaintXP或Gimp保存)在中間有一個(64,64,64)像素的斑點時Debug.Log行在底部返回不正確的值? - 我能得到的最接近的是一個未壓縮的.png(來自Gimp),具有像(65,66,65)這樣的值,但是具有標準圖像,他們似乎回到了(56,56,56)。Unity Texture2D loadImage確切的值
Texture2D tex = null;
byte[] fileData;
if (File.Exists(mapPath + "/map.png"))
{
fileData = File.ReadAllBytes(mapPath + "/map.png");
tex = new Texture2D(size, size, TextureFormat.RGBA32, false);
tex.anisoLevel = 0;
tex.Compress(false);
tex.filterMode = FilterMode.Point;
tex.LoadImage(fileData); // Auto-resize the texture dimensions
Color32[] pixelsRaw = tex.GetPixels32(0);
Color32[,] pixels = new Color32[size, size];
for (int j = 0; j < size - 1; j++)
{
for (int i = 0; i < size - 1; i++)
{
pixels[i, j] = pixelsRaw[(j * tex.height) + i];
}
}
Debug.Log(pixels[512, 512]);
}
這一切都在嘗試讀取從PNG圖片基於區塊的水平。但是,由於返回的值非常不準確,我似乎無法找到使其成爲可能的方法。 (我已經用Java.awt/LWJGL完成了這些工作,它在那裏工作得很好,爲什麼不用Unity呢?)
爲了澄清,這個圖像是從Unity項目外部加載的,所以沒有辦法通過編輯器手動設置壓縮/格式設置。
雖然這個工作,我仍然困惑,爲什麼當一個圖像保存在油漆(只是從WindowsXP的舊版本)將顯示值(64,64,64)在顏色選擇器中打開時在瘸子,但仍然當通過我的原始代碼片段完成基本相同的過程時,返回(56,56,56)。 – Rogod
這兩個PNG(gimp和paint)包含相同的圖像信息,除了在paint中保存的圖像信息有'gAMA'塊,它基本上是這樣說的:「當你顯示我做這個'校正''。網上有幾篇關於這方面的文章可以比我更好地解釋它。只需搜索谷歌「PNG伽瑪校正」。 – Pluto