首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >小功能⭐️Unity中Texture2D、Sprite、Texture、RenderTexture、image、byte的转换

小功能⭐️Unity中Texture2D、Sprite、Texture、RenderTexture、image、byte的转换

作者头像
星河造梦坊官方
发布2024-08-16 08:43:21
发布2024-08-16 08:43:21
5440
举报

🟥 Texture2D与Sprite互转

代码语言:javascript
复制
//转化后大小跟屏幕一样大
Sprite prite = Sprite.Create(要转换的Texture2D, 
            new Rect(0, 0, Screen.width, Screen.height),
            new Vector2(0.5f, 0.5f));
 
//保持原有大小
Sprite prite = Sprite.Create(原图片,
            new Rect(0, 0, 原图片.width, 原图片.height),
            new Vector2(0.5f, 0.5f));
 
//sprite为图集中的某个子Sprite对象
        var targetTex = new Texture2D((int)sprite.rect.width, (int)sprite.rect.height);
        var pixels = sprite.texture.GetPixels(
            (int)sprite.textureRect.x,
            (int)sprite.textureRect.y,
            (int)sprite.textureRect.width,
            (int)sprite.textureRect.height);
        targetTex.SetPixels(pixels);
        targetTex.Apply();

注意: 若想从Sprite转成Texture2D,如果你的Sprite是工程里的一张图片, 则该图片需勾选Read/Write Enabled 选项,否则会报 Texture ‘xxx’ is not readable 这个错误。

🟧 Texture和Texture2D转化

1️⃣ Texture转Texture2D

a、编辑器模式下

代码语言:javascript
复制
/// <summary>
/// 编辑器模式下Texture转换成Texture2D
/// </summary>
/// <param name="texture"></param>
/// <returns></returns>
private Texture2D TextureToTexture2D(Texture texture) {
    Texture2D texture2d = texture as Texture2D;
    UnityEditor.TextureImporter ti = (UnityEditor.TextureImporter)UnityEditor.TextureImporter.GetAtPath(UnityEditor.AssetDatabase.GetAssetPath(texture2d));
    //图片Read/Write Enable的开关
    ti.isReadable = true; 
    UnityEditor.AssetDatabase.ImportAsset(UnityEditor.AssetDatabase.GetAssetPath(texture2d));
    return texture2d;
}

b、运行模式下

代码语言:javascript
复制
/// <summary>
/// 运行模式下Texture转换成Texture2D
/// </summary>
/// <param name="texture"></param>
/// <returns></returns>
private Texture2D TextureToTexture2D(Texture texture) {
        Texture2D texture2D = new Texture2D(texture.width, texture.height, TextureFormat.RGBA32, false);
        RenderTexture currentRT = RenderTexture.active;
        RenderTexture renderTexture = RenderTexture.GetTemporary(texture.width, texture.height, 32);
        Graphics.Blit(texture, renderTexture);
 
        RenderTexture.active = renderTexture;
        texture2D.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);
        texture2D.Apply();
 
        RenderTexture.active = currentRT;
        RenderTexture.ReleaseTemporary(renderTexture);
 
        return texture2D;
}

2️⃣ Texture2D转Texture

Texture2D->Sprite->Texture

🟨 sprite 和 bytes[] 的互相转换

1️⃣ 从sprite 转换到bytes[]

代码语言:javascript
复制
     public byte[] GetByte(Sprite sp)
    {
        //转换成Texture
        Texture2D temp = sp.texture;
        //在转换成bytes
        byte[] photoByte = temp.EncodeToPNG();
        return photoByte;
    }

2️⃣ 从bytes[] 转换到Sprite

代码语言:javascript
复制
    public Sprite GetSprite(Byte[] bytes)
    {
        //先创建一个Texture2D对象,用于把流数据转成Texture2D
        Texture2D texture = new Texture2D(10, 10);
        texture.LoadImage(bytes);//流数据转换成Texture2D
        //创建一个Sprite,以Texture2D对象为基础
        Sprite sp = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero);
        return sp;
    }

🟩 操作文件File类方法

读、写、移动、删除等 操作文件File类方法文件操作相关类知识

大家还有什么问题,欢迎在下方留言!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🟥 Texture2D与Sprite互转
  • 🟧 Texture和Texture2D转化
    • 1️⃣ Texture转Texture2D
    • 2️⃣ Texture2D转Texture
  • 🟨 sprite 和 bytes[] 的互相转换
    • 1️⃣ 从sprite 转换到bytes[]
    • 2️⃣ 从bytes[] 转换到Sprite
  • 🟩 操作文件File类方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档