为什么在我加载外部的时候使用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