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;
}
- NGUI图集切割代码
- 切割NGUI图集
- NGUI九宫格反向切割拉伸
- NGUI图集杂说
- DELPHI切割文件代码
- [NGUI]NGUI自定义图集和自定义字体
- [NGUI]NGUI自定义图集和自定义字体
- NGUI动态切换图集
- NGUI 制作动态图集
- NGUI 相关代码
- NGUI 代码布局工具
- NGUI的代码控制
- NGUI UILabel 代码换行
- NGUI---代码控制Archor
- c++切割文件的代码
- NGUI HUD text 代码示例
- NGUI 制作字体集和图集
- NGUI自定义图集和自定义字体
- hdu 4635 Strongly connected 强连通
- VirtualBOX安装Mac OS X 10.7正式版_可完美升级,无bug
- 欧拉函数
- SPFA
- 线程的休眠
- NGUI图集切割代码
- pcre3编译报错:libtool: compile: unrecognized option `-DHAVE_CONFIG_H'
- UVa 458 The Decoder(解码器)
- 基于Tomcat7、Java、WebSocket的服务器推送聊天室
- uva 10557 XYZZY(DFS+BFS)
- 2013多校联合4 1008 Hehe (hdu 4639)
- ASP.NET Web API框架揭秘:HttpMessageHandler管道[上篇]
- system3之:6-NFS服务
- Android 开发时要注意的问题