コード例 #1
0
        public static void NineCrop(this Texture2D source, int gutter, TextureFormat format = TextureFormat.RGBA32)
        {
            if (source.width != source.height)
            {
                throw new Exception("Failed to nine crop image, source image width and height must be equal.");
            }
            int realSize     = source.width;
            int realOffset   = source.width - 1;
            int canvasWidth  = source.width * 3;
            int canvasHeight = source.width * 3;

            Color[]   canvasPixels  = source.GetPixels(0, 0, realSize, realSize);
            Texture2D canvasTexture = new Texture2D(canvasWidth, canvasHeight, format, false);

            canvasTexture.SetPixels((realOffset * 0), (realOffset * 0), realSize, realSize, canvasPixels);
            canvasTexture.SetPixels((realOffset * 0), (realOffset * 1), realSize, realSize, canvasPixels);
            canvasTexture.SetPixels((realOffset * 0), (realOffset * 2), realSize, realSize, canvasPixels);
            canvasTexture.SetPixels((realOffset * 1), (realOffset * 0), realSize, realSize, canvasPixels);
            canvasTexture.SetPixels((realOffset * 1), (realOffset * 1), realSize, realSize, canvasPixels);
            canvasTexture.SetPixels((realOffset * 1), (realOffset * 2), realSize, realSize, canvasPixels);
            canvasTexture.SetPixels((realOffset * 2), (realOffset * 0), realSize, realSize, canvasPixels);
            canvasTexture.SetPixels((realOffset * 2), (realOffset * 1), realSize, realSize, canvasPixels);
            canvasTexture.SetPixels((realOffset * 2), (realOffset * 2), realSize, realSize, canvasPixels);
            canvasTexture.Apply();
            int cropSize   = realSize * 2;
            int cropOffset = (canvasWidth - cropSize) / 2;

            Color[]   centerPixels  = canvasTexture.GetPixels(cropOffset, cropOffset, cropSize, cropSize);
            Texture2D centerTexture = new Texture2D(cropSize, cropSize, format, false);

            centerTexture.SetPixels(centerPixels);
            centerTexture.Apply();
            if (gutter > 0)
            {
                int gutterSize   = realSize - (gutter * 2);
                int gutterOffset = (gutter - 1);
                centerTexture.Scale(gutterSize, gutterSize);
                Color[] gutterPixels  = centerTexture.GetPixels(0, 0, gutterSize, gutterSize);
                var     gutterTexture = new Texture2D(realSize, realSize, format, false);
                gutterTexture.Clear(Color.green);
                gutterTexture.SetPixels(gutterOffset, gutterOffset, gutterSize, gutterSize, gutterPixels);
                gutterTexture.Apply();
                source.Resize(realSize, realSize);
                source.SetPixels(gutterTexture.GetPixels());
                source.Apply();
            }
            else
            {
                centerTexture.Scale(realSize, realSize);
                source.Resize(realSize, realSize);
                source.SetPixels(centerTexture.GetPixels());
                source.Apply();
            }
        }
コード例 #2
0
        public static Texture2D Extrude(this Texture2D source, int padding, bool bilinearScaling = true, TextureExtrude extrudeColor = TextureExtrude.Default)
        {
            if (source == null)
            {
                return(null);
            }
            int     ratio      = padding * 2;
            int     width      = source.width - ratio;
            int     height     = source.height - ratio;
            Vector2 tileSize   = new Vector2(width, height);
            Vector2 borderSize = new Vector2(padding, padding);

            source.Scale(width, height, bilinearScaling);
            return(source.Extrude(tileSize, borderSize, extrudeColor));
        }