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

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

首先读取NGUI图集的信息

[csharp] view plaincopy
UIAtlas mAtlas ;
GameObject[] SelectedAsset=Selection.gameObjects;
if (SelectedAsset.Length == )
{
mAtlas = SelectedAsset[].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[]);
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[] + ".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[];
arg[] = atlasPng;
arg[] = 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 plaincopy
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
string[] p;
string path = string.Empty;
public Form1(string[] s)
{
InitializeComponent();
p = s;
ImageName.Text = p[];
path = p[];
} 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[];
if (!Directory.Exists(savePath))
{
Directory.CreateDirectory(savePath);
}
textPath = p + "\\"+sts[]+".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=,y=,width=,height=;
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 - ];
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 - ]);
// 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-]);
// 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 - ]);
// 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 - ]);
// 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图集切割代码的更多相关文章

  1. Unity3d通用工具类之NGUI图集分解

    ---恢复内容开始--- Unity3d通用工具类之NGUI图集分解 由于最近需要一些美术资源吗,但是无奈自己不会制作UI,所以就打算去网上的项目中直接找几张可以使用的贴图资源. 但是发现这些资源已经 ...

  2. 解决切换场景时NGUI图集资源未释放的问题

    使用unity3d编辑器,在切换场景的时候.NGUI的图集没有释放造成内存不足游戏闪退的问题. 默认情况下,unity3d切换场景之后会释放不用的内存,即内部会调用Resources.UnloadUn ...

  3. python实现gabor滤波器提取纹理特征 提取指静脉纹理特征 指静脉切割代码

    参考博客:https://blog.csdn.net/xue_wenyuan/article/details/51533953 https://blog.csdn.net/jinshengtao/ar ...

  4. NGUI 图集生成 图片Sprite 有撕裂边的问题

    修改 Dimensions 的 X 和 Y值进行调整. 在生成图集时 选择Padding 设置1以上 应该不会出现这个问题.

  5. Unity NGUI 图集Atlas制作

    unity版本:4.5 NGUI版本:3.6.5 1.选择要制作的图片放到对应目录下,在Asset下新建一个文件夹Picture用于放置图片: 2.选中一张图片,打开Atlas Maker: 3.单击 ...

  6. NGUI图集字体

    UIFont里使用Symbols来指定字体时用Sprite前缀和名字自动分配的工具,前段时间工作需要时写的,具体用法有空时再写. using UnityEngine; using UnityEdito ...

  7. 【java】【mybatis】在使用mybatis进行批量插入,批量更新等批量操作时,切割In集合List进行分批批量操作的java中的切割代码

    红字部分代表mybatis的批量操作调用方法: int num = 0; int maxLength = 200; int size = usableCodes.size(); if (size &l ...

  8. 新闻门户网站图集相册JS代码

    新闻网站jQuery图集相册代码,支持键盘方向键切换,支持点击图片左右区域切换,支持自动轮播,带缩略图.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class= ...

  9. NGUI中Button与原生2D精灵的混合使用

    一些废话 每一篇的首段都是这个“一些废话”,原因是我太能逼逼了,不逼逼一些废话我就觉得难受.这是我第四篇关于Unity的博文,前两篇还是去年写的,“从一点儿不会开始”系列,类似教程和学习笔记的博文,这 ...

随机推荐

  1. es6 Object的几个新方法

    扩展对象 Object.preventExtensions Object.isExtensible 密封对象 Object.seal Object.isSealed 冻结对象 Object.freez ...

  2. 洛谷—— P1598 垂直柱状图

    P1598 垂直柱状图 题目描述 写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过72个字符),然后用柱状图输出每个字符在输入文件中出现的次数.严格地按照输出样例来安排你的输出格式. ...

  3. Flask实战第51天:cms添加轮播图后端代码逻辑完成

    首先,我们需要给轮播图设计一张表,因为轮播图前端要展示,CMS要管理,所以我们在apps下新建个models.py 编辑apps.models.py from exts import db from ...

  4. 微软移除Visual Studio 2015中的UML

    微软已经在Visual Studio 2015中移除了UML(Unified Modeling Language,统一建模语言),原因是该语言使用率过低.因此微软要优化产品结构,把好钢用在刀刃上. V ...

  5. ES5 方法学习

    Object 1. Object.getPrototypeOf(o)获取对象的prototype对象.等价于以前的o.__proto__ var o = {}; Object.getPrototype ...

  6. ARC-100 E - Or Plus Max

    题面在这里! 我们如果可以求出 f[x] = max{ a[i] + a[j] , i!=j && i or j == x},那么就可以通过前缀max直接递推答案了. 但是这个玩意不是 ...

  7. 【NTT】hdu1402 A * B Problem Plus

    r·2^k+1 r k g 3 1 1 2 5 1 2 2 17 1 4 3 97 3 5 5 193 3 6 5 257 1 8 3 7681 15 9 17 12289 3 12 11 40961 ...

  8. 【置换群】poj3270 Cow Sorting

    并不应该叫置换群……只是用到了置换而已,并没有群. 题解看这个吧,我就不写了:http://www.cnblogs.com/kuangbin/archive/2012/09/03/2669013.ht ...

  9. [NOIp2016提高组]天天爱跑步

    题目大意: 有一棵n个点的树,每个点上有一个摄像头会在第w[i]秒拍照. 有m个人再树上跑,第i个人沿着s[i]到t[i]的路径跑,每秒钟跑一条边. 跑到t[i]的下一秒,人就会消失. 问每个摄像头会 ...

  10. [BZOJ4304]/[JZOJ3486]道路改建

    题目大意: 给你一个有向图,你可以把其中某一条单向边改成双向边,使得图中最大的SCC最大. 问SCC最大能是多少,有哪些方案? 思路: 对原图缩点后就变成了一个DAG. 我们在DAG上DP,记录一下从 ...