gpt4 book ai didi

c# - unity Texture2D loadImage 精确取值

转载 作者:行者123 更新时间:2023-11-30 17:32:45 24 4
gpt4 key购买 nike

为什么使用 Unity 加载外部 1024x1024 RGBA32 .png(通过 PaintXP 或 Gimp 保存)并在中心有一个 (64,64,64) 像素的 Blob 时,底部的 Debug.Log 行会返回不正确的值? - 我能得到的最接近的是未压缩的 .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 图像中读取基于图 block 的关卡。但是由于返回值如此不准确,我似乎无法找到一种方法来实现这一点。 (我已经用 Java.awt/LWJGL 完成了很多次并且在那里工作正常,为什么不使用 Unity?)

澄清一下,这张图片是从 Unity 项目外部加载的,因此无法通过编辑器手动设置压缩/格式设置。

最佳答案

有几个问题:压缩和 Gamma 校正。

1.当您调用Compress时在你的 Texture2D 上它会压缩你的纹理。 bool 参数只告诉它进行低质量或高质量压缩。所以只需删除以下行:tex.Compress(false);

2. PNG 具有 Gamma 信息。当您导出到 png 时,Gimp 有一个选项来保存 gamma 或不保存。因此,在 Gimp 中打开您的图像并在未选中“保存 Gamma”选项的情况下将其导出。

或者,我可以通过使用 TweakPNG 从 png 中删除 gAMAsRGB 属性来获得相同的结果。 .

关于c# - unity Texture2D loadImage 精确取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46014555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com