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