unity Texture2D loadImage 精确取值
Unity Texture2D loadImage exact values
为什么使用 Unity,当我加载外部 1024x1024 RGBA32 .png(通过 PaintXP 或 Gimp 保存),中心有一个 (64,64,64) 像素的斑点时,Debug.Log 行在底部 return 值不正确? - 我能得到的最接近的是未压缩的 .png(来自 Gimp),其值类似于 (65,66,65),但对于标准图像,它们似乎返回为 (56,56,56)。
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 图像中读取基于图块的关卡。但是由于 returned 值如此不准确,我似乎无法找到一种方法来实现这一点。 (我已经用 Java.awt/LWJGL 完成了很多次并且在那里工作正常,为什么不使用 Unity?)
澄清一下,这张图片是从 Unity 项目外部加载的,因此无法通过编辑器手动设置 compression/format 设置。
为什么使用 Unity,当我加载外部 1024x1024 RGBA32 .png(通过 PaintXP 或 Gimp 保存),中心有一个 (64,64,64) 像素的斑点时,Debug.Log 行在底部 return 值不正确? - 我能得到的最接近的是未压缩的 .png(来自 Gimp),其值类似于 (65,66,65),但对于标准图像,它们似乎返回为 (56,56,56)。
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 图像中读取基于图块的关卡。但是由于 returned 值如此不准确,我似乎无法找到一种方法来实现这一点。 (我已经用 Java.awt/LWJGL 完成了很多次并且在那里工作正常,为什么不使用 Unity?)
澄清一下,这张图片是从 Unity 项目外部加载的,因此无法通过编辑器手动设置 compression/format 设置。