博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NGUI图集切割代码
阅读量:6941 次
发布时间:2019-06-27

本文共 6471 字,大约阅读时间需要 21 分钟。

原地址:http://blog.csdn.net/u011440375/article/details/9707491

因为最近工作用NGUI比较多,修改图集时还没原图,有时候需要把图集重新切割开来,用代码会比较方便,一下贴出主要代码首先读取NGUI图集的信息[csharp] view plaincopyUIAtlas mAtlas  ;           GameObject[] SelectedAsset=Selection.gameObjects;           if (SelectedAsset.Length == 1)           {               mAtlas = SelectedAsset[0].GetComponent
(); 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编写一个程序切割图集,主要代码如下[csharp] view plaincopynamespace 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
.+), coordinate:\(x:(?P
\d+)\.00, y:(?P
\d+)\.00, width:(?P
\d+)\.00, height:(?P
\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; }

 

你可能感兴趣的文章
使用原生JS进行前后端同构
查看>>
【MySQL学习笔记】 MySQL 建立索引
查看>>
Mac开发React Native ---环境搭建
查看>>
[译] 如何手动启动 Angular 程序
查看>>
【数据结构】Java语言描述-单链表的基本操作
查看>>
[翻译]基于Webpack4使用懒加载分离打包React代码
查看>>
Android系统源码分析-JNI
查看>>
Linux下无法正常安装和删除Nodejs的解决方法
查看>>
利用闲置 PC 搭建 NAS 媒体中心 远程下载
查看>>
fishshell中virtualenv配置的小问题
查看>>
提高效率的VScode插件
查看>>
2017-09-24 前端日报
查看>>
TiDB 助力一面数据实现消费领域的决策分析平台
查看>>
面试--web安全的理解
查看>>
初次学习 Docker Volume 的基本使用 (四)
查看>>
关于饭局狼人杀app上的12人守卫局的那些事儿
查看>>
Java中的异常处理
查看>>
深入理解ES6之《块级作用域绑定》
查看>>
Solution - 收藏集 - 掘金
查看>>
分享一个可用于拖动排序的vue组件
查看>>