1. 程式人生 > >unity 生成縮圖

unity 生成縮圖

根據記憶體的圖片生成縮圖

        public void CreateThumbnail(byte[] bytes, string path)
        {
            int w = 125, h = 125;

            Texture2D mThumbnail = new Texture2D(1, 1);

            mThumbnail.LoadImage(bytes);
            //mThumbnail.Scale(w, h);
            Texture2D thumb = ScaleTexture(mThumbnail, w, h);
            Object.DestroyImmediate(mThumbnail);


            byte[] bytesThumbnail = thumb.EncodeToPNG();

            System.IO.FileStream outputThumbnail = new System.IO.FileStream(path, FileMode.Create);
            outputThumbnail.Write(bytesThumbnail, 0, bytesThumbnail.Length);
            outputThumbnail.Flush();
            outputThumbnail.Close();

            Object.DestroyImmediate(thumb);
        }

        public void SaveToThumbnailFile(string path, byte[] bytes)
        {
            int w = 125;
            int h = 125;

            Texture2D mThumbnail = new Texture2D(1, 1);
            mThumbnail.LoadImage(bytes);
            //mThumbnail.Scale(w, h);

            Texture2D thumb = ScaleTexture(mThumbnail, w, h);
            Object.DestroyImmediate(mThumbnail);


            byte[] bytesThumbnail = thumb.EncodeToJPG();

            System.IO.FileStream outputThumbnail = new System.IO.FileStream(path, FileMode.Create);
            outputThumbnail.Write(bytesThumbnail, 0, bytesThumbnail.Length);
            outputThumbnail.Flush();
            outputThumbnail.Close();

            Object.DestroyImmediate(thumb);
        }
        public Texture2D ScaleTexture(Texture2D source, int targetWidth, int targetHeight)
        {
            Texture2D result = new Texture2D(targetWidth, targetHeight, source.format, false);

            float incX = (1.0f / (float)targetWidth);
            float incY = (1.0f / (float)targetHeight);

            for (int i = 0; i < result.height; ++i)
            {
                for (int j = 0; j < result.width; ++j)
                {
                    Color newColor = source.GetPixelBilinear((float)j / (float)result.width, (float)i / (float)result.height);
                    result.SetPixel(j, i, newColor);
                }
            }

            result.Apply();
            return result;
        }