我正在这个项目中修改纹理/图像。
我有一个用于保存最终图像信息的类,当创建一个类时,我从图像中获取原始纹理数据,并将所有像素存储到NativeArray。
public class PImage
{
public readonly string ID = string.Empty;
public Texture2D processed = null;
public NativeArray<Color32> pixels = new NativeArray<Color32>();
public PImage(Texture2D tex)
{
this.ID = Util.GenerateID();
this.processed = tex;
this.pixels = this.processed.GetRawTextureData<Color32>();
}
public void SetPixels(NativeArray<Color32> pixels)
{
this.pixels = pixels;
this.processed.LoadRawTextureData<Color32>(this.pixels);
this.processed.Apply();
}
}
我的项目中有一些功能,一个功能是每当我按下一个按钮时,我就会调用使所有图像像素反转的方法。
public void InvertColors(NativeArray<Color32> pixels)
{
if (pixels.Length <= 0) { return; }
for (int i = 0; i < pixels.Length; i++)
{
byte r = (byte)Truncate(255 - pixels[i].r);
byte g = (byte)Truncate(255 - pixels[i].g);
byte b = (byte)Truncate(255 - pixels[i].b);
byte a = pixels[i].a;
pixels[i] = new Color32(r, g, b, a);
}
//Main is a main class that holds a reference to the active image.
//GetActiveImage is just a Func<PImage> that returns active PImage reference.
Main.GetActiveImage().SetPixels(pixels);
}
private float Truncate(float value)
{
if (value < 0) { return 0; }
if (value > 255) { return 255; }
return value;
}
这应该可以正常工作,但是更改后图像看起来已损坏。
尽管一旦我再次按下“反转”按钮,图像就会恢复正常,没有任何损坏。
由于效率高,我使用LoadRawTextureData和GetRawTextureData。我发现使用这些方法比使用SetPixels和GetPixels更快。
有人可以给我一些建议,为什么会发生这种情况?