NGUI图集切割代码
原地址: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图集切割代码的更多相关文章
- Unity3d通用工具类之NGUI图集分解
---恢复内容开始--- Unity3d通用工具类之NGUI图集分解 由于最近需要一些美术资源吗,但是无奈自己不会制作UI,所以就打算去网上的项目中直接找几张可以使用的贴图资源. 但是发现这些资源已经 ...
- 解决切换场景时NGUI图集资源未释放的问题
使用unity3d编辑器,在切换场景的时候.NGUI的图集没有释放造成内存不足游戏闪退的问题. 默认情况下,unity3d切换场景之后会释放不用的内存,即内部会调用Resources.UnloadUn ...
- python实现gabor滤波器提取纹理特征 提取指静脉纹理特征 指静脉切割代码
参考博客:https://blog.csdn.net/xue_wenyuan/article/details/51533953 https://blog.csdn.net/jinshengtao/ar ...
- NGUI 图集生成 图片Sprite 有撕裂边的问题
修改 Dimensions 的 X 和 Y值进行调整. 在生成图集时 选择Padding 设置1以上 应该不会出现这个问题.
- Unity NGUI 图集Atlas制作
unity版本:4.5 NGUI版本:3.6.5 1.选择要制作的图片放到对应目录下,在Asset下新建一个文件夹Picture用于放置图片: 2.选中一张图片,打开Atlas Maker: 3.单击 ...
- NGUI图集字体
UIFont里使用Symbols来指定字体时用Sprite前缀和名字自动分配的工具,前段时间工作需要时写的,具体用法有空时再写. using UnityEngine; using UnityEdito ...
- 【java】【mybatis】在使用mybatis进行批量插入,批量更新等批量操作时,切割In集合List进行分批批量操作的java中的切割代码
红字部分代表mybatis的批量操作调用方法: int num = 0; int maxLength = 200; int size = usableCodes.size(); if (size &l ...
- 新闻门户网站图集相册JS代码
新闻网站jQuery图集相册代码,支持键盘方向键切换,支持点击图片左右区域切换,支持自动轮播,带缩略图.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class= ...
- NGUI中Button与原生2D精灵的混合使用
一些废话 每一篇的首段都是这个“一些废话”,原因是我太能逼逼了,不逼逼一些废话我就觉得难受.这是我第四篇关于Unity的博文,前两篇还是去年写的,“从一点儿不会开始”系列,类似教程和学习笔记的博文,这 ...
随机推荐
- 两个线程交替打印奇偶数【Lock版】
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public clas ...
- 可持久化01Trie树【p4735(bzoj3261)】最大异或和
Description 给定一个非负整数序列\(\{a\}\),初始长度为\(N\). 有\(M\)个操作,有以下两种操作类型: A x:添加操作,表示在序列末尾添加一个数\(x\),序列的长度\(N ...
- Loj#6432「PKUSC2018」真实排名(二分查找+组合数)
题面 Loj 题解 普通的暴力是直接枚举改或者不改,最后在判断最后对哪些点有贡献. 而这种方法是很难优化的.所以考虑在排序之后线性处理.首先先假设没有重复的元素 struct Node { int p ...
- 洛谷——P3414 SAC#1 - 组合数
P3414 SAC#1 - 组合数 题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供. 寂月城网站是完美信息教室的官网.地址:http://191.101.11.174/mgzd . 题目描述 辣 ...
- HDU6074 Phone Call (并查集 LCA)
Phone Call Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)Tota ...
- 【Go】语法基础之结构体
结构体的定义很简单: type Vertex struct { X, Y float64 } 可以理解为多个变量的集合. 结构体的使用: 1.直接使用: v := Vertex{1, 2} 或 var ...
- Spring 异常
Java Web项目整体异常处理机制 http://www.51testing.com/html/90/n-823590.html spring mvc 异常统一处理方式 http://www.c ...
- BZOJ 2157 旅游(树链剖分+线段树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2157 [题目大意] 支持修改边,链上查询最大值最小值总和,以及链上求相反数 [题解] ...
- 【CCpp程序设计2017】简单进销存
题目:简单进销存 功能要求: 实现如下的菜单(按数字选择菜单功能): 1. 显示存货列表 2. 入库 3. 出库 4. 退出程序 实现菜单对应功能(需记录货物的型号.数量等信息): 程序启动时从文件中 ...
- [NOIp2016提高组]换教室
题目大意: 有n节课,第i节课在c[i]上课,同时d[i]也有一节课d[i]. 你有权利向教务处发出m次申请把自己的教室改到d[i],相应的批准概率是k[i]. 教室是图上的一些点,其中每条边都有边权 ...