NGUI图集切割代码

来源:互联网 发布:java 递归算法阶乘 编辑:程序博客网 时间:2024/05/02 01:38

因为最近工作用NGUI比较多,修改图集时还没原图,有时候需要把图集重新切割开来,用代码会比较方便,一下贴出主要代码

首先读取NGUI图集的信息

UIAtlas mAtlas  ;         GameObject[] SelectedAsset=Selection.gameObjects;         if (SelectedAsset.Length == 1)         {             mAtlas = SelectedAsset[0].GetComponent<UIAtlas>();             if (mAtlas != null)             {                 string atlasFile = string.Format("{0}.txt", mAtlas.name);                 string atlasPng = string.Format("{0}.png", mAtlas.name);                 char[] ch = { '.' };                 string path = AssetDatabase.GetAssetPath(SelectedAsset[0]);                 FileInfo aFileinfo = new FileInfo(path);                 string th = aFileinfo.DirectoryName;                 string[] strs = path.Split(ch);                 if (File.Exists(atlasFile))                 {                     File.Delete(atlasFile);                 }                 StreamWriter sw = new StreamWriter(strs[0] + ".txt");                 StringBuilder sb = new StringBuilder();                 foreach (UIAtlas.Sprite sprite in mAtlas.spriteList)                 {                     sb.AppendLine(string.Format("name:{0}, coordinate:{1}", sprite.name, sprite.outer));                 }                 sw.Write(sb.ToString());                 sw.Close();                 string[] arg = new string[2];                 arg[0] = atlasPng;                 arg[1] = th;                 //print(arg[0]);                 //print(arg[1]);                 string path_2 = AssetDatabase.GetAssetPath(Resources.Load("CutAltas/output"));                 FileInfo aFileinfo_2 = new FileInfo(path_2);                 string th_2 = aFileinfo_2.DirectoryName;                 print(th_2);                 string s = th_2 + "\\Start.exe";
这是主要的代码,接下来用vs编写一个程序切割图集,主要代码如下
namespace WindowsFormsApplication1{    public partial class Form1 : Form    {        string[] p;        string path = string.Empty;        public Form1(string[] s)        {            InitializeComponent();            p = s;            ImageName.Text = p[0];            path = p[1];        }        private void button1_Click(object sender, EventArgs e)        {            CutImage(path);            Application.Exit();                   }                void CutImage(string p)         {            string path=@"c:\Documents and Settings\Administrator\桌面\";            string savePath=string.Empty;            string imagePath = p + "\\"+ImageName.Text;            string textPath = string.Empty;            Image img = Image.FromFile(imagePath);                        char[] c = { '.' };            string st= ImageName.Text;            string[] sts = st.Split(c);            savePath = path + sts[0];            if (!Directory.Exists(savePath))            {                Directory.CreateDirectory(savePath);            }            textPath = p + "\\"+sts[0]+".txt";            StreamReader sr = new StreamReader(textPath);            while (!sr.EndOfStream)            {                string newLine = sr.ReadLine();             //   Regex reg = new Regex(@"name:(?P<name>.+), coordinate:\(x:(?P<x>\d+)\.00, y:(?P<y>\d+)\.00, width:(?P<width>\d+)\.00, height:(?P<height>\d+)\.00\)");             //   Regex regName = new Regex(@"\bname:\.*");                string patternName = @"\bname:\w*";                string patternX = @"\bcoordinate:\(x:\w*\.\d\d";                string patternY = @"\by:\d*\.\d\d";                string patternWidth = @"\bwidth:\d*\.\d\d";                string patternHeight = @"\bheight:\d*\.\d\d";                string name = savePath+"\\";                float x=0,y=0,width=0,height=0;                char[] maoHao = { ':' };                                MatchCollection imageName = Regex.Matches(newLine, patternName, RegexOptions.ExplicitCapture);                foreach (Match nextMatch in imageName)                {                    int index = nextMatch.Index;                    string result = nextMatch.ToString();                                       string[] re = result.Split(maoHao);                    name += re[re.Length - 1];                    name += ".png";                  //  MessageBox.Show(re[1]);                }                MatchCollection positionX = Regex.Matches(newLine, patternX, RegexOptions.ExplicitCapture);                foreach (Match nextMatch in positionX)                {                    int index = nextMatch.Index;                    string result = nextMatch.ToString();                    string[] re = result.Split(maoHao);                    x = float.Parse(re[re.Length - 1]);                //    MessageBox.Show(x.ToString());                }                MatchCollection positionY = Regex.Matches(newLine, patternY, RegexOptions.ExplicitCapture);                foreach (Match nextMatch in positionY)                {                    int index = nextMatch.Index;                    string result = nextMatch.ToString();                    string[] re = result.Split(maoHao);                    y = float.Parse(re[re.Length-1]);                //    MessageBox.Show(y.ToString());                }                MatchCollection widths = Regex.Matches(newLine, patternWidth, RegexOptions.ExplicitCapture);                foreach (Match nextMatch in widths)                {                    int index = nextMatch.Index;                    string result = nextMatch.ToString();                    string[] re = result.Split(maoHao);                    width = float.Parse(re[re.Length - 1]);                //    MessageBox.Show(width.ToString());                }                MatchCollection heights = Regex.Matches(newLine, patternHeight, RegexOptions.ExplicitCapture);                foreach (Match nextMatch in heights)                {                    int index = nextMatch.Index;                    string result = nextMatch.ToString();                    string[] re = result.Split(maoHao);                    height = float.Parse(re[re.Length - 1]);                 //   MessageBox.Show(height.ToString());                 //   MessageBox.Show("Name: " + name + "x :" + x.ToString() + "y :" + y.ToString() + "width :" + width.ToString() + "height :" + height.ToString());                }            //    MessageBox.Show("Name: "+name+"x :"+x.ToString()+"y :"+y.ToString()+"width :"+width.ToString()+"height :"+height.ToString());                Bitmap bmp = new Bitmap(img);                Rectangle rec = new Rectangle((int)x, (int)y, (int)width, (int)height);                bmp = bmp.Clone(rec, bmp.PixelFormat);                bmp.Save(name, System.Drawing.Imaging.ImageFormat.Png);            }                     MessageBox.Show("切割完成,返回桌面查看!");        //    Bitmap bmp = new Bitmap(img, 100, 100);          //  bmp.Save(path + "newImage.jpg");        }    }}
最后unity要调用vs生成的程序,并且传进参数

static bool StartProcess(string filename, string[] args)
    {
        //print("wwww");
        try
        {
            string s="";
            foreach(string arg in args) 
            {
                s += string.Format("\"{0}\" ", arg);
            }
            s = s.Trim();
            print(s);
            Process myprocess = new Process();
            ProcessStartInfo startInfo = new ProcessStartInfo(filename,s);
            myprocess.StartInfo = startInfo;
            myprocess.StartInfo.UseShellExecute = false;
            myprocess.Start();
            return true;
        }
        catch (Exception ex)
        {
            UnityEngine.Debug.Log("出错原因:" + ex.Message);
        }
        return false; 
    
    }

原创粉丝点击