Я работаю над этим проектом, в котором я изменяю текстуры / изображения.
У меня есть этот класс, который содержит информацию о моем конечном изображении, при создании класса я получаю необработанные данные текстуры из изображения и сохраняю всепикселей в 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.
Может кто-нибудь дать мне совет, почему это может происходить?