在实际应用开发中,有时候需要通过代码对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();
// 释放临时的RenderTexture
RenderTexture.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;
}
更多【unity-Unity 通过代码控制Texture进行缩放】相关视频教程:www.yxfzedu.com