当我使用Unity加载一个1024x1024 RGBA32格式的外部.png图片(通过PaintXP或Gimp保存),并在中心放置一个像素块(64,64,64),为什么底部的Debug.Log行会返回不正确的值?最接近的结果是使用未压缩的.png文件(来自Gimp)并设置像(65,66,65)这样的值,但是对于标准图像,它们似乎会返回(56,56,56)。
这全部都是为了从 .png 图片中读取基于瓦片的关卡。但由于返回的值非常不准确,我似乎找不到一种使这成为可能的方法。(我用 Java.awt/LWJGL 做过很多次,那里运行得很好,为什么在 Unity 中不行呢?)需要澄清的是,这张图片是从 Unity 项目外部加载的,所以无法通过编辑器手动设置压缩/格式设置。
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 项目外部加载的,所以无法通过编辑器手动设置压缩/格式设置。