如何将类型“UnityEngine.Texture2D”转换为“UnityEngine.Sprite”?

Jor*_*iaz 4 image sprite texture2d unity-game-engine

您好,我尝试将纹理 2D 转换为图像(并且我无法使用原始图像,因为分辨率在手机中不匹配),但问题是图像没有纹理元素。如何在Image.Sprite中转换UnityEngine.Texture2D。

//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);       
}
Run Code Online (Sandbox Code Playgroud)

Rem*_*_rm 6

Sprite.Create正是您正在寻找的。

来自Sprite.Create 的Unity 文档

Sprite.Create 创建一个可在游戏应用程序中使用的新 Sprite。需要加载纹理并将其分配给 Create 以控制新 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

}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我们从 中获取图像数据myTexture2D,并创建一个new Rect与原始texture2D大小相同的纹理,其枢轴点位于中心,每单位使用100个像素。然后我们将新制作的精灵应用到图像上。