天天看點

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);
           

繼續閱讀