原地址: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. thinkphp下实现ajax无刷新分页

    1.前言 作为一名php程序员,我们开发网站主要就是为了客户从客户端进行体验,在这里,thinkphp框架自带的分页类是每次翻页都要刷新一下整个页面,这种翻页的用户体验显然是不太理想的,我们希望每次翻 ...

  2. 【Leetcode】264. Ugly Number II ,丑数

    原题 Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime facto ...

  3. 谜题54:Null与Void

    下面仍然是经典的Hello World程序的另一个变种.那么,这个变种将打印什么呢? public class Null { public static void greet() { System.o ...

  4. smail修改字符串 汉字

    韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha  313134555@qq.com 将smali文件中的unicode字符串变为汉字

  5. qsc round#2 喵哈哈村的排队(本辣鸡想七想八的,特写此博文给自己一个提醒)

    该oj是qsc自己写的比赛,友情链接:http://qscoj.cn/ 喵哈哈村的排队 发布时间: 2017年2月26日 16:13   最后更新: 2017年2月26日 16:14   时间限制: ...

  6. 【线段树】Atlantis

    Atlantis Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 23181   Accepted: 8644 Descrip ...

  7. 【贪心】AtCoder Regular Contest 079 E - Decrease (Judge ver.)

    每次将最大的数减到n以下,如此循环直到符合题意. 复杂度大概是n*n*log?(?). #include<cstdio> #include<iostream> #include ...

  8. Problem A: 深入浅出学算法022-汉诺塔问题II

    #include<stdio.h> void hanio(int n,char a,char b,char c) { ) printf("%c->%c\n",a, ...

  9. 你一定喜欢看的 Webpack 2.× 入门实战(转载)

    最近在学习 Webpack,网上大多数入门教程都是基于 Webpack 1.x 版本的,我学习 Webpack 的时候是看了 zhangwang 的 <<入门 Webpack,看这篇就够了 ...

  10. FFT算法的完整DSP实现

    傅里叶变换或者FFT的理论参考: [1] http://www.dspguide.com/ch12/2.htm The Scientist and Engineer's Guide to Digita ...