private static string ExtractDMI(string input, string outPath, string file) { var ser = new Serializer(new List <Type> { typeof(DmiImage), typeof(DMIState), typeof(DMIFrame), typeof(DMIImageData) }); DmiImage dmi = null; try { dmi = new DmiImage(file); } catch (Exception e) { _log.Error("Error during extraction", e); return(null); } // only parse power of two if (!IsPowerOfTwo(dmi.StateHeight) && !IsPowerOfTwo(dmi.StateWidth)) { return(null); } var oPath = Path.Combine(outPath, Path.GetDirectoryName(file.Replace(input + "\\", "")), dmi.DmiName); if (!Directory.Exists(oPath)) { Directory.CreateDirectory(oPath); } using (var stream = File.Create(Path.Combine(oPath, Datafile))) { ser.Serialize(stream, dmi); } var stateIndex = 0; foreach (var dmiState in dmi.States) { var statePath = Path.Combine(oPath, stateIndex.ToString()); if (!Directory.Exists(statePath)) { Directory.CreateDirectory(statePath); } int frameIndex = 0; foreach (var frame in dmiState.GetFrames()) { var framePath = Path.Combine(statePath, frameIndex.ToString()); if (!Directory.Exists(framePath)) { Directory.CreateDirectory(framePath); } foreach (var image in frame.GetImages()) { var imgPath = Path.Combine(framePath, image.Dir + ".png"); var bitmap = !use4X?hqx.HqxSharp.Scale2(image.Bitmap) : hqx.HqxSharp.Scale4(image.Bitmap); bitmap.Save(imgPath); } frameIndex++; } stateIndex++; } _log.InfoFormat("Extracted {0}", file); return(Path.Combine(oPath, Datafile)); }
private static void Rebuild(string file, string outPath) { var ser = new Serializer(new List <Type> { typeof(DmiImage), typeof(DMIState), typeof(DMIFrame), typeof(DMIImageData) }); var path = Path.GetDirectoryName(file); var relPath = path.Replace((outPath + "\\raw"), ""); if (relPath.StartsWith("\\")) { relPath = relPath.Substring(1); } DmiImage dmi = null; try { using (var stream = File.OpenRead(file)) { dmi = (DmiImage)ser.Deserialize(stream); } } catch (Exception e) { _log.Error("Error during rebuild", e); throw; } if (!use4X) { dmi.StateHeight = dmi.StateHeight * 2; dmi.StateWidth = dmi.StateWidth * 2; } else { dmi.StateHeight = dmi.StateHeight * 4; dmi.StateWidth = dmi.StateWidth * 4; } var stateIndex = 0; foreach (var state in dmi.States) { var statePath = Path.Combine(path, stateIndex.ToString()); var frameIndex = 0; foreach (var frame in state.GetFrames()) { var framePath = Path.Combine(statePath, frameIndex.ToString()); foreach (var image in frame.GetImages()) { var imagePath = Path.Combine(framePath, image.Dir.ToString() + ".png"); if (File.Exists(imagePath)) { image.Bitmap = new Bitmap(imagePath); } else { Console.WriteLine("File {0} not found!", imagePath); } } frameIndex++; } stateIndex++; } DmiImage.Create(dmi, Path.Combine(outPath, "processed", relPath + ".dmi")); }
private static string ExtractDMI(string input, string outPath, string file) { var ser = new Serializer(new List <Type> { typeof(DmiImage), typeof(DMIState), typeof(DMIFrame), typeof(DMIImageData) }); DmiImage dmi = null; dmi = new DmiImage(file); /* try * { * dmi = new DmiImage(file); * } * catch (Exception e) * { * _log.Error("Error during extraction", e); * return null; * } */ var oPath = Path.Combine(outPath, Path.GetDirectoryName(file.Replace(input + "\\", "")), dmi.DmiName); if (!Directory.Exists(oPath)) { Directory.CreateDirectory(oPath); } using (var stream = File.Create(Path.Combine(oPath, Datafile))) { ser.Serialize(stream, dmi); } var stateIndex = 0; for (int i = 0; i < dmi.States.Count(); i++) { DMIState dmiState = dmi.States[i]; var statePath = Path.Combine(oPath, stateIndex.ToString()); if (!Directory.Exists(statePath)) { Directory.CreateDirectory(statePath); } int frameIndex = 0; foreach (var frame in dmiState.GetFrames()) { var framePath = Path.Combine(statePath, frameIndex.ToString()); if (!Directory.Exists(framePath)) { Directory.CreateDirectory(framePath); } foreach (var image in frame.GetImages()) { var imgPath = Path.Combine(framePath, image.Dir + ".png"); // MakeImageTransform(image); image.Bitmap.Save(imgPath); } frameIndex++; } stateIndex++; } _log.InfoFormat("Extracted {0}", file); return(Path.Combine(oPath, Datafile)); }