示例#1
0
文件: SwfDump.cs 项目: yzqlwt/Swf2XNA
        static void Main(string[] args)
        {
            Console.WriteLine("SWF DUMP TOOL - swf v8");
            Console.WriteLine("");
#if !DEBUG
            if (args.Length < 1)
            {
                Console.WriteLine("");
                Console.WriteLine("Need some swf file format help? Parser tools? Generators?");
                Console.WriteLine("Just give me a shout : )   [email protected]");
                Console.WriteLine("");
                Console.WriteLine("");
                Console.WriteLine("Usage: swfdump <filename>");
                return;
            }
#endif

            string fileName = (args.Length < 1) ? "test.swf" : args[0];
            if (File.Exists(fileName))
            {
                fileName = Path.GetFullPath(fileName);
                Directory.SetCurrentDirectory(Path.GetDirectoryName(fileName));
                FileStream   fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
                BinaryReader br = new BinaryReader(fs);

                string             name = Path.GetFileNameWithoutExtension(fileName);
                SwfReader          r    = new SwfReader(br.ReadBytes((int)fs.Length));
                SwfCompilationUnit scu  = new SwfCompilationUnit(r, name);
                if (scu.IsValid)
                {
                    StringWriter       sw = new StringWriter();
                    IndentedTextWriter w  = new IndentedTextWriter(sw);
//					scu.Dump(w);
//					Console.WriteLine(sw.ToString());

                    SwfToVex  s2v = new SwfToVex();
                    VexObject vo  = s2v.Convert(scu);

                    DumpTextObject(vo);
                    //VexTo2DPhysics.VexTo2DPhysics v2dp = new VexTo2DPhysics.VexTo2DPhysics();
                    //v2dp.Convert(vo, scu);

                    Console.WriteLine("");
                    Console.WriteLine("Need some swf file format help? [email protected]");
                    Console.WriteLine("");

                    //temp
                    MemoryStream ms        = new MemoryStream();
                    SwfWriter    swfWriter = new SwfWriter(ms);
                    scu.Header.IsCompressed = false;
                    scu.ToSwf(swfWriter);
                    byte[]     swfBytes = swfWriter.ToArray();
                    FileStream fsw      = new FileStream("dump.swf", FileMode.Create, FileAccess.Write);
                    fsw.Write(swfBytes, 0, swfBytes.Length);
                    fsw.Close();
                    ms.Close();

                    //Console.ReadLine();
                }
                else
                {
                    Console.WriteLine("Not a valid swf file: " + fileName);
                    Console.WriteLine("Usage: swfdump <filename>");
                }
            }
            else
            {
                Console.WriteLine(fileName + " does not exist.");
                Console.WriteLine("Usage: swfdump <filename>");
            }
        }
示例#2
0
        static void Main(string[] args)
        {
            Console.WriteLine("SWF BITMAP PACKER - swf v8");
            Console.WriteLine("");

            string fileName        = (args.Length < 1) ? "test.swf" : args[0];
            bool   packBitmapsOnly = (args.Length < 2) ? false : args[1].ToUpperInvariant() == "-B";

            if (File.Exists(fileName))
            {
                fileName = Path.GetFullPath(fileName);
                Directory.SetCurrentDirectory(Path.GetDirectoryName(fileName));
                FileStream   fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
                BinaryReader br = new BinaryReader(fs);

                string             name = Path.GetFileNameWithoutExtension(fileName);
                SwfReader          r    = new SwfReader(br.ReadBytes((int)fs.Length));
                SwfCompilationUnit scu  = new SwfCompilationUnit(r, name);
                if (scu.IsValid)
                {
                    UnsafeBitmap fullBitmap;
                    Dictionary <uint, System.Drawing.Rectangle> rectResult = new Dictionary <uint, System.Drawing.Rectangle>();

                    SwfToVex  s2v = new SwfToVex();
                    VexObject vo  = s2v.Convert(scu);

                    if (packBitmapsOnly)
                    {
                        Dictionary <uint, string> bitmapPaths = s2v.bitmapPaths;
                        fullBitmap = BitmapPacker.PackBitmaps(bitmapPaths, rectResult);
                    }
                    else
                    {
                        fullBitmap = BitmapPacker.PackBitmaps(vo, rectResult);
                    }

                    foreach (var rect in rectResult)
                    {
                        Console.WriteLine("\t" + rect.Value + ",");
                    }
                    fullBitmap.Bitmap.Save("fullBitmap.png");

                    if (packBitmapsOnly)
                    {
                        BitmapSwapper bs = new BitmapSwapper();
                        bs.Convert(scu, fullBitmap, rectResult);

                        MemoryStream ms        = new MemoryStream();
                        SwfWriter    swfWriter = new SwfWriter(ms);
                        scu.ToSwf(swfWriter);
                        byte[]     swfBytes = swfWriter.ToArray();
                        FileStream fsw      = new FileStream("result.swf", FileMode.Create, FileAccess.Write);
                        fsw.Write(swfBytes, 0, swfBytes.Length);
                        fsw.Close();
                        ms.Close();
                    }
                }
                else
                {
                    Console.WriteLine("Not a valid swf file: " + fileName);
                    Console.WriteLine("Usage: SwfBitmapPacker <filename>");
                }
            }
            else
            {
                Console.WriteLine(fileName + " does not exist.");
                Console.WriteLine("Usage: SwfBitmapPacker <filename>");
            }
        }