public static void Convert(String src, String dst) { FileInfo fi = new FileInfo(src); FileInfo fiDst = new FileInfo(dst); FPG fpg = FPG.Open(src); String outFile = dst; List<String> Lfiles = new List<String>(); String tmpFolder = Path.GetTempPath() + fi.Name + DateTime.Now.Ticks.ToString() + "\\"; if (!Directory.Exists(tmpFolder)) Directory.CreateDirectory(tmpFolder); foreach (MAP m in fpg.Maps) { String name = m.Code.ToString().PadLeft(3, '0') + "_" + m.Name; String pngFile = tmpFolder + name + ".png"; m.ExportToPNG(fpg.Pal, pngFile); PNG p = new PNG(pngFile); p.SetTextChunk("Description", m.Name); if (m.ControlPoints.Count == 0) m.ControlPoints.Add(0, new Point(m.Width / 2, m.Height / 2)); String chunk = String.Empty; foreach (KeyValuePair<int, Point> kv in m.ControlPoints.OrderBy(x => x.Key)) chunk += kv.Key + "=" + kv.Value.X + "," + kv.Value.Y + "|"; chunk = chunk.Substring(0, chunk.Length - 1); p.SetTextChunk("ControlPoints", chunk); p.Save(pngFile); Lfiles.Add(pngFile); } using (StreamWriter sw = new StreamWriter(tmpFolder + "\\Type.txt")) sw.WriteLine("GFX"); Lfiles.Add(tmpFolder + "\\Type.txt"); ZIP zipfile = new ZIP(outFile); zipfile.Files.AddRange(Lfiles); zipfile.Save(); zipfile.Close(); if (Directory.Exists(tmpFolder)) Directory.Delete(tmpFolder, true); }
public static void Convert(String src, String dst) { FileInfo fi = new FileInfo(src); FileInfo fiDst = new FileInfo(dst); FNT fnt = FNT.Open(src); String outFile = dst; List<String> Lfiles = new List<String>(); String tmpFolder = Path.GetTempPath() + fi.Name + DateTime.Now.Ticks.ToString() + "\\"; if (!Directory.Exists(tmpFolder)) Directory.CreateDirectory(tmpFolder); foreach (FNT.FNTStruct f in fnt.Characters.Where(x => x.FileOffset > 0 && x.Map.Width > 0 && x.Map.Height > 0)) { String name = f.Map.Code.ToString().PadLeft(3, '0'); String pngFile = tmpFolder + name + ".png"; f.Map.ExportToPNG(fnt.Pal, pngFile); PNG p = new PNG(pngFile); p.SetTextChunk("Description", name); p.SetTextChunk("OffsetPos", f.OffX + "," + f.OffY); p.SetTextChunk("OffsetSize", f.OffWidth + "," + f.OffHeight); p.Save(pngFile); Lfiles.Add(pngFile); } using (StreamWriter sw = new StreamWriter(tmpFolder + "\\Type.txt")) sw.WriteLine("FNT"); Lfiles.Add(tmpFolder + "\\Type.txt"); ZIP zipfile = new ZIP(outFile); zipfile.Files.AddRange(Lfiles); zipfile.Save(); zipfile.Close(); if (Directory.Exists(tmpFolder)) Directory.Delete(tmpFolder, true); }
public void Save(string filename) { Bitmap.Save(filename); PNG p = new PNG(filename); p.SetTextChunk("Description", Name); if (ControlPoints.Count == 0) ControlPoints.Add(0, new Point(Bitmap.Width / 2, Bitmap.Height / 2)); String chunk = String.Empty; foreach (KeyValuePair<int, Point> kv in ControlPoints.OrderBy(x => x.Key)) chunk += kv.Key + "=" + kv.Value.X + "," + kv.Value.Y + "|"; chunk = chunk.Substring(0, chunk.Length - 1); p.SetTextChunk("ControlPoints", chunk); if(OffsetPosition != null) p.SetTextChunk("OffsetPos", OffsetPosition.X + "," + OffsetPosition.Y); if(OffsetSize != null) p.SetTextChunk("OffsetSize", OffsetSize.Width + "," + OffsetSize.Height); p.Save(filename); }
public static void Convert(String src, String dst) { FileInfo fi = new FileInfo(src); FileInfo fiDst = new FileInfo(dst); List<String> Lfiles = new List<String>(); String tmpFolder = Path.GetTempPath() + fi.Name + DateTime.Now.Ticks.ToString() + "\\"; String outFolder = tmpFolder + "output\\"; if (!Directory.Exists(outFolder)) Directory.CreateDirectory(outFolder); ZIP z = new ZIP(); try { z = new ZIP(fi.FullName); z.Open(); font f = Xml.Deserialize<font>("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + z.ExtractFileToString("font.fnt")); foreach (fontPage p in f.pages) z.ExtractFile(p.file, tmpFolder + p.file); foreach (fontCharsChar c in f.chars.@char) { if (c.width == 0 && c.height == 0) continue; String outFile = outFolder + c.id.ToString().PadLeft(3, '0') + ".png"; Rectangle rCrop = new Rectangle(c.x, c.y, c.width, c.height); using (Bitmap bSrc = Image.FromFile(tmpFolder + f.pages[c.page].file) as Bitmap) { using (Bitmap bDst = new Bitmap(c.width, c.height)) { using (Graphics g = Graphics.FromImage(bDst)) g.DrawImage(bSrc, new Rectangle(0, 0, bDst.Width, bDst.Height), rCrop, GraphicsUnit.Pixel); bDst.Save(outFile); } } PNG p = new PNG(outFile); p.SetTextChunk("Description", c.id.ToString()); p.SetTextChunk("OffsetPos", "0,0"); p.SetTextChunk("OffsetSize", c.xoffset + "," + c.yoffset); p.Save(outFile); Lfiles.Add(outFile); } z.Close(); } catch (Exception) { z.Close(); } using (StreamWriter sw = new StreamWriter(outFolder + "\\Type.txt")) sw.WriteLine("FNT"); Lfiles.Add(outFolder + "\\Type.txt"); ZIP fnt = new ZIP(dst); fnt.Files.AddRange(Lfiles); fnt.Save(); fnt.Close(); if (Directory.Exists(tmpFolder)) Directory.Delete(tmpFolder, true); }