在实际应用开发中,有时候需要通过代码对Texture进行缩放。
有两个方法,一个是通过控制宽高进行缩放,另一个是通过比例值进行等比例缩放。
1、控制宽高的方法:
/// <summary>/// 纹理缩放方法一,指定宽高/// </summary>/// <param name="tex">缩放原始纹理</param>/// <param name="scaledWidth">缩放后的宽度</param>/// <param name="scaledHeight">缩放后的纹理</param>/// <returns></returns>Texture2D ScaleTexture(Texture2D tex,int scaledWidth,int scaledHeight){// 创建缩放后的纹理tex = new Texture2D(scaledWidth, scaledHeight);// 将原始纹理的像素数据拷贝到缩放后的纹理RenderTexture renderTexture = RenderTexture.GetTemporary(scaledWidth, scaledHeight);RenderTexture.active = renderTexture;Graphics.Blit(sourceTexture, renderTexture);// 从RenderTexture中读取像素数据并应用到缩放后的纹理tex.ReadPixels(new Rect(0, 0, scaledWidth, scaledHeight), 0, 0);tex.Apply();// 释放临时的RenderTextureRenderTexture.active = null;RenderTexture.ReleaseTemporary(renderTexture);return tex;}
2、通过比例值进行等比例缩放:
/// <summary>/// 纹理缩放方法二,等比例/// </summary>/// <param name="tex">原始纹理</param>/// <param name="ratio">比例</param>/// <returns></returns>public Texture2D ScaleTexture(Texture2D tex, float ratio){if (tex == null)return null;if (ratio <= 0)return tex;Color color;int scaledWidth = (int)(tex.width * ratio);int scaledHeight = (int)(tex.height * ratio);Texture2D newTex = new Texture2D(scaledWidth, scaledHeight, TextureFormat.RGB24, false);float newWidthGap = scaledWidth * ratio;float newHieghtGap = scaledHeight * ratio;for (int i = 0; i < newTex.height; i++){for (int j = 0; j < newTex.width; j++){color = tex.GetPixel((int)(j * (1 / ratio)), (int)(i * (1 / ratio)));newTex.SetPixel(j, i, color);}}return newTex;}