LoadImage (byteArray) не работает с единством - PullRequest
0 голосов
/ 08 мая 2020
 void fotogetir2()
{
    Firebase.Storage.FirebaseStorage storage = Firebase.Storage.FirebaseStorage.DefaultInstance;

    Firebase.Storage.StorageReference storage_ref = storage.GetReferenceFromUrl("------ url ------");
    const long maxAllowedSize = 1 * 1024 * 1024;
    storage_ref.GetBytesAsync(maxAllowedSize).ContinueWith((Task<byte[]> task) => {
        if (task.IsFaulted || task.IsCanceled)
        {
            Debug.Log(task.Exception.ToString());
            // Uh-oh, an error occurred!
        }
        else
        {
            byte[] fileContents = task.Result;
            Debug.Log("Finished downloading!");


            Debug.Log("texture created !!" + fileContents.Length);


            Texture2D texture = new Texture2D(2, 2);
            Debug.Log("texture created !!" + fileContents.Length);
            Debug.Log("texture rendered !!");
              texture.LoadImage(fileContents);  //  clogged here !!!!!!!!!!!!!
            GetComponent<Renderer>().material.mainTexture = texture;
            if (texture != null)
            {
                Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
                im.sprite = sprite;
            }

            Debug.Log("image loaded !!");




        }
    });
}

моя функция все здесь Кто-нибудь мне поможет? что я не так? Я хочу показать картинку по ссылке на хранилище firebase. Подключаюсь к хранилищу и конвертирую в байтовый массив. Я хочу записать байтовый массив на текстуру и экспортировать его как изображение. но я не мог писать на текстуре.

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Я решил эту проблему, просто переместите определение процесса за пределы. Иногда смотришь и видишь разные вещи .. Если что хочешь спросить, помогу, чем смогу. По комментариям ..

void fotoGetir(string url)
{
    Firebase.Storage.FirebaseStorage storage = Firebase.Storage.FirebaseStorage.DefaultInstance;
    byte[] fileContents=null;
    Firebase.Storage.StorageReference storage_ref = storage.GetReferenceFromUrl(url);
    const long maxAllowedSize = 1 * 1024 * 1024;
    storage_ref.GetBytesAsync(maxAllowedSize).ContinueWithOnMainThread((Task<byte[]> task) =>
    {
        if (task.IsFaulted || task.IsCanceled)
        {
            Debug.Log(task.Exception.ToString());
            // Uh-oh, an error occurred!
        }
        else
        {
          fileContents = task.Result;
            Debug.Log("Finished downloading!");

        }
        byte[] fotoBytes;
        Texture2D texture = new Texture2D(2, 2);
        if(fileContents != null) { 
        texture.LoadImage(fileContents);
            Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
            soruImage.sprite = sprite;
        }


    });
    }
1 голос
/ 08 мая 2020

Попробуйте заменить ContinueWith на ContinueWithOnMainThread. Вы делаете много работы в пространстве имен UnityEngine из фонового потока, который может получиться схематичным.

Если вы следовали моему видеоуроку , вот почему я использованные сопрограммы.

Если это сработает, не стесняйтесь читать мою запись в блоге или смотреть мое видео о многопоточности в Unity для получения дополнительной информации о том, что происходит и какие другие варианты:

- Патрик

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...