コード例 #1
0
ファイル: Program.cs プロジェクト: DrizzleRaine/hqxdmi
        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));
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: DrizzleRaine/hqxdmi
        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"));
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: PurpleMartinJCK/hqxdmi
        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));
        }