Ошибка CS0029 Невозможно неявно преобразовать тип «System.Drawing.Image» в «UnityEngine.Sprite» - PullRequest
0 голосов
/ 31 января 2019

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

Ошибка CS0029 Невозможно неявно преобразовать тип 'System.Drawing.Image' в 'UnityEngine.Sprite'. Вот элемент классаи код, где я получаю изображение байтов и преобразую в изображение.

РЕДАКТИРОВАТЬ 1 добавил sql, где я получаю изображение.Я хочу добавить изображение в Item.icon.

public class Item
{
    public string itemName;
    public Sprite icon;
}

 public List<Image> string_to_image()
{
    connString = string.Format("Server={0};Port={1};User Id={2};Password={3};Database={4};",
                                             serverName, port, userName, password, databaseName);
    imagem = null;
    using (var conn = new NpgsqlConnection(connString))
    {
        string sQL = "SELECT imagem from salva_imagem";
        using (var command = new NpgsqlCommand(sQL, conn))
        {
            byte[] productImageByte = null;
            conn.Open();
            var rdr = command.ExecuteReader();
            while (rdr.Read())
            {
                productImageByte = (byte[])rdr["imagem"]; ;
                num_imagem++;

                if (productImageByte != null)
                {
                   ImageConverter imageConverter = new ImageConverter();
                    var pic =    imageConverter.ConvertFrom(productImageByte) as Image;
                }
            }
            rdr.Close();
        }
    }
    return imagem ?? null;
}

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Попробуйте использовать ImageConversion.LoadImage .Например:

var myTexture2D = new Texture2D(128, 128);
ImageConversion.LoadImage(myTexture2D , myByteArray);

Здесь вы можете использовать один из фабричных методов Sprite для создания спрайта из Texture2D на предыдущем шаге:

var sprite = Sprite.Create(myTexture2D, new Rect(0, 0, 128, 128), new Vector2(0.5f, 0.5f));

Этот код создаст спрайт, используя всю текстуру, и поместит точку разворота в центр.

Надеюсь, это поможет.

0 голосов
/ 31 января 2019

Вы не можете использовать ImageConverter для преобразования байтов в компонент Unity Image.

Не видя ретробов вашего кода, это сложно сказать, но я думаю, что вы хотите сделать, это загрузитьэто изображение из указанного пути или URL-адреса в sprite компонента Image.

public void GetTexture(string url, Action<Texture> onSuccess)
{
    StartCoroutine (LoadTexture(url, onSuccess));
}

private IEnumerator LoadTexture(string url, Action<Texture> onSuccess)
{
    UnityWebRequest www = UnityWebRequestTexture.GetTexture(url);
    yield return www.SendWebRequest();

    if(www.isNetworkError || www.isHttpError)
    {
        Debug.Log(www.error);
    }
    else 
    {
        onSuccess?.Invoke(((DownloadHandlerTexture)www.downloadHandler).texture);
    }
}

Обратите внимание, что url также может быть локальным путем к файлу или, тем не менее, вы получаете изображение из своей базы данных..

Чем вы можете создать Sprite, используя

GetTexture(pathOrUrl, OnSuccess);

private void OnSuccess(Texture texture)
{
    var tex = (Texture2D) texture;
    var newSprite = Sprite.Create(new Rect(0.0f, 0.0f, tex.width, tex.height), new Vector2(0.5f, 0.5f), 100.0f);

    // Assign it to an Image component
    imageReference.sprite = newSprite;
}

, или пропустить его и использовать вместо него компоненты RawImage .Тем не менее, обратите внимание, что это добавляет вызовы и их следует избегать.

private void OnSuccess (Texture texture)
{
    rawImageReference.texture = texture;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...