天天看点

Unity3d C# 代码以字节数组byte[]动态创建(new Texture2D)纹理贴图(Texture)动态byte[]和Texture互转

动态

用代码创建贴图纹理可以直接使用 new Texture2D函数来实现,然后可以使用SetPixel来设置纹理的每个像素点,而在对接口是常用到的是给定图片的字节数组来创建,代码如下:

Texture2D Tex = new Texture2D(2560, 1440); 
   Tex.LoadImage(Data);  //这个便是字节数组
           

byte[]和Texture互转

当然字节数组和纹理也可以进行互转,不同格式,有不同的函数支持,详细的内库说明如下:

public static byte[] EncodeToEXR(this Texture2D tex);
        [NativeMethod(Name = "ImageConversionBindings::EncodeToEXR", IsFreeFunction = true, ThrowsException = true)]
        public static byte[] EncodeToEXR(this Texture2D tex, Texture2D.EXRFlags flags);
        //
        // 摘要:
        //     将此纹理编码为JPG格式。        
        // 参数:
        //   tex:
        //     转换的纹理
        //
        //   quality:
        //     编码JPG的质量 , 1..100 (默认 75).
        public static byte[] EncodeToJPG(this Texture2D tex);
        //
        // 摘要:
        //     将此纹理编码为JPG格式。        
        // 参数:
        //   tex:
        //     转换的纹理
        //
        //   quality:
        //     编码JPG的质量 , 1..100 (默认 75).

        [NativeMethod(Name = "ImageConversionBindings::EncodeToJPG", IsFreeFunction = true, ThrowsException = true)]
        public static byte[] EncodeToJPG(this Texture2D tex, int quality);
        //
        // 摘要:
        //     将此纹理编码为PNG格式。        
        // 参数:
        //   tex:
        //     转换的纹理

        [NativeMethod(Name = "ImageConversionBindings::EncodeToPNG", IsFreeFunction = true, ThrowsException = true)]
        public static byte[] EncodeToPNG(this Texture2D tex);
        //
        //
        // 摘要:
        //     将此纹理编码为TGA格式。        
        // 参数:
        //   tex:
        //     转换的纹理

        [NativeMethod(Name = "ImageConversionBindings::EncodeToTGA", IsFreeFunction = true, ThrowsException = true)]
        public static byte[] EncodeToTGA(this Texture2D tex);
        //
        // 摘要:
        //     加载PNG/JPG (或者其他支持格式) 的格式图片给纹理.
        //
        // 参数:
        //   data:
        //     加载的字节数组.
        //
        //   markNonReadable:
        //     默认设置为false,传递true可选地将纹理标记为不可读。
        //
        //   tex:
        //     载入图像的纹理
        //
        // 返回结果:
        //    如果数据可以被加载,则返回true,否则返回false。
        [NativeMethod(Name = "ImageConversionBindings::LoadImage", IsFreeFunction = true)]
        public static bool LoadImage([NotNull("ArgumentNullException")] this Texture2D tex, byte[] data, bool markNonReadable);
        public static bool LoadImage(this Texture2D tex, byte[] data);
           

继续阅读