统一更改Texture2D格式

时间:2018-04-25 10:34:14

标签: c# unity3d

我加载Textured2D,在ETC_RGB4中表示如何将其更改为其他格式?说RGBA32。基本上我想从3个频道切换到4个频道,从每个频道4个比特切换到每个频道8个。

由于

1 个答案:

答案 0 :(得分:6)

您可以在运行时更改纹理格式。

1 。创建新的空Texture2D并向RGBA32参数提供TextureFormat。这将创建一个RGBA32格式的空纹理。

2 。使用Texture2D.GetPixels获取ETC_RGB4格式中旧纹理的像素,然后使用Texture2D.SetPixels将这些像素放入来自#1 的新创建的纹理。

3 。致电Texture2D.Apply以应用更改。那就是它。

一种简单的扩展方法:

public static class TextureHelperClass
{
    public static Texture2D ChangeFormat(this Texture2D oldTexture, TextureFormat newFormat)
    {
        //Create new empty Texture
        Texture2D newTex = new Texture2D(2, 2, newFormat, false);
        //Copy old texture pixels into new one
        newTex.SetPixels(oldTexture.GetPixels());
        //Apply
        newTex.Apply();

        return newTex;
    }
}

<强> USAGE

public Texture2D theOldTextue;

// Update is called once per frame
void Start()
{
    Texture2D RGBA32Texture = theOldTextue.ChangeFormat(TextureFormat.RGBA32);
}