Unityで、外部に1024x1024のRGBA32 .png(PaintXPまたはGimpのいずれかを介して保存されています)を読み込み、中心にblob(64,64,64)ピクセルを読み込むと、なぜDebug.Log行に底は不正確な値を返しますか? - 私が得ることができる最も近いのは、(Gimpから)圧縮されていない.png(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イメージからタイルベースのレベルを読み取ろうとしていました。しかし、戻り値が不正確であるため、これを可能にする方法を見つけることができないようです。明確にするために
(、なぜUnityの?私がいるjava.awt/LWJGLで倍のこの負荷をやったし、それが正常に動作します)、この画像はユニティプロジェクトの外部からロードされているので、方法はありませんエディタを使用して圧縮/書式設定を手動で設定します。
Gimpで開いたときにカラーピッカーで(64,64,64)に値が表示されるのはなぜですか(WindowsXPの古い画像のみ)元のスニペットで本質的に同じプロセスが実行されたときに返されます(56,56,56)。 – Rogod
2つのPNG(gimpとpaint)には同じ画像情報が含まれていますが、塗料に保存されているものには、基本的に「私がこの修正をしたときに表示される」というgAMAブロックがあります。私ができるよりはるかに優れていることを説明できるウェブ上の記事がいくつかあります。ちょうどGoogleの "PNGガンマ補正"を検索します。 – Pluto