void RecompressGMFiles(object o) { RecompressThreadArgs rta = (RecompressThreadArgs)o; string inDir = rta.inDir; string[] allFiles = Directory.GetFiles(inDir); int numFiles = allFiles.Length; WaitDlg dlg = rta.dlg; string pngDirectory = Path.Combine(inDir, "bmp"); dlg.UpdateStatus("Recompressing {0} files", numFiles); string outDir = rta.outDir; string gmllFile = @"T:\out.gmll"; for (int i = 0; i < numFiles; ++i) { Box.ResetIndexCount(); string currentFile = allFiles[i]; byte[] gmFileData; MemoryStream decompGM; using (FileStream fs = File.OpenRead(currentFile)) { decompGM = Compress.GZipDecompress(fs); gmFileData = decompGM.ToArray(); } string curFile = Path.GetFileName(currentFile); string pngFile = Path.Combine(pngDirectory, curFile + ".bmp"); GTMP.GMFile.GMFileInfo fi = GTMP.GMFile.Parse(decompGM); List <IBox> boxes = ConvertGMFileBoxes(fi.Boxes); if (!Tools.ConvertImageTo(pngFile, gmllFile, Tools.ConvertType.GM)) { dlg.UpdateStatus(String.Format("Couldn't convert {0} to GT2 foreground, skipping", pngFile)); continue; } try { byte[] gmllData = Images.LoadGMLLData(gmllFile); string newFileName = Path.Combine(outDir, curFile); GMProject.ExportGM(newFileName, boxes, fi.Metadata, gmllData); } catch (InvalidBoxStateException ibse) { DebugLogger.Log("Debug", "Exception was from {0}", currentFile); dlg.UpdateStatus("Caught invalid box exception {0} for {1} in file {2}", ibse.Message, ibse.InvalidBox.Name, currentFile); File.Delete(gmllFile); } if ((i != 0) && ((i % 100) == 0)) { dlg.UpdateStatus(String.Format("Tested {0} files", i)); } } dlg.AllowClose("All done"); }
private void recompressFiles_Click(object sender, EventArgs e) { string inDir = @"C:\Users\Adrian\Downloads\GT2\US1.0Vol\USBmpTest"; string outDir = @"C:\Users\Adrian\Downloads\GT2\US1.0Vol\USBmpTestMod"; using (WaitDlg dlg = new WaitDlg("Checking GM Files")) { RecompressThreadArgs rta = new RecompressThreadArgs(); rta.dlg = dlg; rta.inDir = inDir; rta.outDir = outDir; System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(RecompressGMFiles), rta); dlg.ShowDialog(this); } }