EncodeToJpg вращается и отражается на мобильном телефоне - PullRequest
0 голосов
/ 26 апреля 2018

Итак, я получаю Texture2D из плагина камеры и все в порядке. Затем я сохраняю образ в ПЗУ устройства:

public static void AddImageAtt(Texture2D tex)
{
    if (tex == null) { return; }

    byte[] bytes = tex.EncodeToJPG();

    // Save full image on disk
    string name = System.DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".jpg";
    string path = GetPathFromName(name);
    File.WriteAllBytes(path, bytes);
    bytes = null;
    Texture2D.Destroy(tex);
}

Затем я могу получить изображение позже:

public static Texture2D GetMainImageFromName(string name)
{
    if(string.IsNullOrEmpty(name) == true) { return null; }
    string path = GetPathFromName(name);
    try
    {
        byte[] bytes = File.ReadAllBytes(path);
        Texture2D t = new Texture2D(1,1);
        t.LoadImage(bytes);
        t.Apply();
        return t;
    }catch { return null; }
}

Texture2D идет к изображению, но зеркально отражается по оси x и поворачивается на 90 градусов.

Теперь я могу понять поворот, поскольку при съемке я не сохраняю ориентацию устройства, а как насчет зеркального отображения?

Отлично работает в редакторе. И я не могу вручную установить масштаб и вращение, потому что он используется в прямоугольнике прокрутки и приводит в порядок размеры.

Так почему же все не так? Я попытался EncodeToPng, и он делает то же самое.

Это происходит на всех протестированных устройствах Android (около 10 из них разных марок и поколений).

1 Ответ

0 голосов
/ 26 апреля 2018

Вы можете сохранить зеркальное изображение, но я не думаю, что это хорошее решение для вашей проблемы.

Вы можете использовать этот код для зеркального отображения текстуры2D:

Texture2D FlipTexture(Texture2D original) {
    Texture2D flipped = new Texture2D(original.width,original.height);

    int xN = original.width;
    int yN = original.height;


    for (int i=0;i<xN;i++) {
        for (int j=0;j<yN;j++) {
            flipped.SetPixel(xN-i-1, j, original.GetPixel(i,j));
        }
    }
    flipped.Apply();

    return flipped;
}
...