Как преобразовать тип 'UnityEngine.Texture2D' в 'UnityEngine.Sprite? - PullRequest
0 голосов
/ 20 июня 2019

Привет, я пытаюсь преобразовать текстуру 2D в изображение (и я не могу использовать необработанное изображение, потому что разрешение не совпадает в телефонах), но проблема в том, что в изображении отсутствует элемент текстуры. Как конвертировать UnityEngine.Texture2D в Image.Sprite.

//Image Profile
protected Texture2D pickedImage;
public Texture2D myTexture2D;
public RawImage getRawImageProfile;
public RawImage getRawImageArrayProfile;

public Image getRawImageProfile2;
public Image getRawImageArrayProfile2;

 public void PickImageFromGallery(int maxSize = 256)
{
    NativeGallery.GetImageFromGallery((path) => 
    {
        if( path != null )
        {
            byte[] imageBytes = File.ReadAllBytes(path);
            pickedImage = null;
            pickedImage = new Texture2D(2, 2);
            pickedImage.LoadImage(imageBytes);
            getRawImageProfile.texture = pickedImage;
            getRawImageArrayProfile.texture = pickedImage;

            getRawImageProfile2.sprite = pickedImage; //ERROR CONVERT SPRITE
            //getRawImageArrayProfile2.texture = pickedImage;
        }

    }, maxSize: maxSize);

    byte[] myBytes;
    myBytes = pickedImage.EncodeToPNG();
    enc = Convert.ToBase64String(myBytes);       
}

1 Ответ

0 голосов
/ 20 июня 2019

Sprite.Create делает именно то, что вы ищете.

Из документов Unity на Sprite.Create:

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

В коде:

public Texture2D myTexture2D; // The texture you want to convert to a sprite
Sprite mySprite; // The sprite you're gonna save to
Image myImage; // The image on which the sprite is gonna be displayed

public void FooBar()
{
    mySprite = Sprite.Create(myTexture2D, new Rect(0.0f, 0.0f, myTexture2D.width, myTexture2D.height), new Vector2(0.5f, 0.5f), 100.0f);
    myImage.sprite = mySprite; // apply the new sprite to the image

}

В приведенном выше примере мы берем изображениеданных из myTexture2D и создайте new Rect того же размера, что и исходный texture2D, с точкой поворота в центре, используя 100 пикселей на единицу.Затем мы применяем вновь созданный спрайт к изображению.

...