美文网首页Unity技术分享Unity教程合集
Unity使用C#不失真修改图片的分辨率

Unity使用C#不失真修改图片的分辨率

作者: BowenK | 来源:发表于2017-08-09 15:13 被阅读454次

    unity每个项目都需要使用同一张图的不同的分辨率 icon,这样只要一个最大的分辨率图片就可以了,需要使用的时候直接修改图片的分辨率,用完还可以删除掉,是不是既方便又可以节省不少空间。不逼逼直接上脚本

    修改图片分辨的方法:

    public static Texture2D ReSetTextureSize(Texture2D tex, int width, int height)

    {

    var rendTex = new RenderTexture(width, height, 24, RenderTextureFormat.ARGB32);

    rendTex.Create();

    Graphics.SetRenderTarget(rendTex);

    GL.PushMatrix();

    GL.Clear(true, true, Color.clear);

    GL.PopMatrix();

    var mat = new Material(Shader.Find("Unlit/Transparent"));

    mat.mainTexture = tex;

    Graphics.SetRenderTarget(rendTex);

    GL.PushMatrix();

    GL.LoadOrtho();

    mat.SetPass(0);

    GL.Begin(GL.QUADS);

    GL.TexCoord2(0, 0);

    GL.Vertex3(0, 0, 0);

    GL.TexCoord2(0, 1);

    GL.Vertex3(0, 1, 0);

    GL.TexCoord2(1, 1);

    GL.Vertex3(1, 1, 0);

    GL.TexCoord2(1, 0);

    GL.Vertex3(1, 0, 0);

    GL.End();

    GL.PopMatrix();

    var finalTex = new Texture2D(rendTex.width, rendTex.height, TextureFormat.ARGB32, false);

    RenderTexture.active = rendTex;

    finalTex.ReadPixels(new Rect(0, 0, finalTex.width, finalTex.height), 0, 0);

    finalTex.Apply();

    return finalTex;

    }

    顺便这里 给大家写个图片的保存方法:

    public static void SaveTexture(Texture2D tex, string toPath)

    {

    using (var fs = File.OpenWrite(toPath))

    {

    var bytes = tex.EncodeToPNG();

    fs.Write(bytes, 0, bytes.Length);

    }

    }

    再补充个图片自动压缩功能

    public static bool CompressTexture(params string[] texturePath)

    {

    var shell = BabySystem.babyFrameWorkAbsolutePath + "TextureTools/";

    if (BabySystem.activeBuildTarget == BuildTarget.iOS)

    shell = shell + "mac/pngquant";

    else

    shell = shell + "win/pngquant.exe";

    var strCmdText = "--ext .png " + "--force -- " + string.Join(" ",texturePath);

    System.Diagnostics.Process process = new System.Diagnostics.Process();

    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();

    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

    startInfo.FileName = shell;

    startInfo.Arguments = strCmdText;

    process.StartInfo = startInfo;

    process.Start();

    process.WaitForExit();

    int ExitCode = process.ExitCode;

    if (ExitCode != 0)

    {

    Debug.LogError("Run CMD CompressTexture Failed : "+ExitCode);

    return false;

    }

    return true;

    }

    这边是这个压缩工具的下载地址:

    压缩工具

    相关文章

      网友评论

        本文标题:Unity使用C#不失真修改图片的分辨率

        本文链接:https://www.haomeiwen.com/subject/rofqrxtx.html