Пример #1
0
        private void ParseDefineBits(DefineBitsTag tag)
        {
            //DDW.Vex.ImageFill bf = new DDW.Vex.ImageFill();
            //string path = v.ResourceFolder + @"/" + VexObject.BitmapPrefix + tag.CharacterId + ".jpg";
            //WriteJpegToDisk(path, tag);
            //Size sz = Utils.GetJpgSize(path);

            //if (tag.HasAlphaData) // this is an alpha jpg, convert to png
            //{
            //    byte[] alphaData = SwfReader.Decompress(tag.CompressedAlphaData, (uint)(sz.Width * sz.Height));

            //    string bmpPath = path;
            //    System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(bmpPath, false);
            //    path = v.ResourceFolder + @"/" + VexObject.BitmapPrefix + tag.CharacterId + ".png";

            //    Utils.WriteAlphaJpg(alphaData, bmp, path);

            //    bmp.Dispose();
            //    File.Delete(bmpPath);
            //}

            //Image img = new Vex.Image(path, v.NextId());
            //img.Id = tag.CharacterId;
            //img.StrokeBounds = new Rectangle(0, 0, sz.Width, sz.Height);

            //bitmapPaths.Add(img.Id, path);
            //v.Definitions.Add(img.Id, img);
        }
Пример #2
0
        public static BitmapFrame ToBitmapFrame(this DefineBitsTag tag)
        {
            if (tag == null)
            {
                return(null);
            }

            BitmapFrame frame;

            try
            {
                using (var stream = new MemoryStream(RepairJpegData(tag.JpegData)))
                {
                    frame = BitmapFrame.Create(stream,
                                               BitmapCreateOptions.IgnoreColorProfile, BitmapCacheOption.OnLoad);
                }
            }
            catch (NotSupportedException)
            {
                return(null);
            }

            var pixelCount = (uint)(frame.Width * frame.Height);
            var alphaData  = tag.HasAlphaData
                ? SwfReader.Decompress(tag.CompressedAlphaData, pixelCount)
                : CreateNonTransparentAlphaData(pixelCount).ToArray();
            var bmp = AlphaBlending(frame, alphaData);

            bmp.Freeze();
            var blendedFrame = BitmapFrame.Create(bmp, null, null, frame.ColorContexts);

            blendedFrame.Freeze();
            return(blendedFrame);
        }
Пример #3
0
    private ImageData GetDefineBitsImageData(DefineBitsTag defineBits)
    {
        var imageData = new ImageData();

        if (defineBits.jpegData != null)
        {
            imageData.characterID = defineBits.characterID;
            imageData.type        = ImageType.Jpg;
            imageData.bytes       = defineBits.jpegData;
        }
        return(imageData);
    }
Пример #4
0
        static void ExploreSWF(Stream stream)
        {
            if (stream == null)
            {
                return;
            }
            SwfReader reader = new SwfReader(stream);
            //SwfExportTagReader reader = new SwfExportTagReader(stream);
            Swf swf = null;

            try
            {
                swf = reader.ReadSwf();
                foreach (BaseTag tag in swf)
                {
                    if (tag is ExportTag)
                    {
                        ExportTag etag = (ExportTag)tag;
                        for (int i = 0; i < etag.Ids.Count; i++)
                        {
                            BaseTag ftag = FindObject(swf, (ushort)etag.Ids[i]);
                            if (ftag is DefineSpriteTag)
                            {
                                DefineSpriteTag stag = (DefineSpriteTag)ftag;
                                Console.WriteLine("Symbol '" + etag.Names[i] + "' - " + stag.Size);
                            }
                            else if (ftag is DefineSoundTag)
                            {
                                DefineSoundTag stag = (DefineSoundTag)ftag;
                                Console.WriteLine("Sound '" + etag.Names[i] + "' - " + stag.MediaData.Length);
                            }
                            else if (ftag is DefineBitsTag)
                            {
                                DefineBitsTag btag = (DefineBitsTag)ftag;
                                Console.WriteLine("Image '" + etag.Names[i] + "' - " + btag.MediaData.Length);
                            }
                        }
                    }
                    else if (tag is DefineFontTag)
                    {
                        DefineFontTag ftag = (DefineFontTag)tag;
                        Console.WriteLine("Font '" + ftag.Name + "' - " + ftag.Data.Length);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("-- Swf error: " + ex.Message);
            }
        }
Пример #5
0
 SwfTagData ISwfTagVisitor <ISwfStreamWriter, SwfTagData> .Visit(DefineBitsTag tag, ISwfStreamWriter writer)
 {
     writer.WriteUInt16(tag.CharacterID);
     writer.WriteBytes(tag.JPEGData);
     return(null);
 }
Пример #6
0
 SwfTagBase ISwfTagVisitor <ISwfStreamReader, SwfTagBase> .Visit(DefineBitsTag tag, ISwfStreamReader reader)
 {
     tag.CharacterID = reader.ReadUInt16();
     tag.JPEGData    = reader.ReadRest();
     return(tag);
 }
Пример #7
0
        /// <summary>
        /// Read next tag from swf input stream.
        /// </summary>
        /// <param name="version">Version.</param>
        /// <param name="binaryReader">Binary reader.</param>
        /// <param name="tagList">Tag list.</param>
        /// <returns></returns>
        internal static BaseTag ReadTag(byte version, BufferedBinaryReader binaryReader, BaseTagCollection tagList)
        {
            long         posBefore = binaryReader.BaseStream.Position;
            RecordHeader rh        = new RecordHeader();

            rh.ReadData(binaryReader);

            int offset = (int)(binaryReader.BaseStream.Position - posBefore);

            binaryReader.BaseStream.Position = posBefore;

            BaseTag resTag = null;

            switch (rh.TagCode)
            {
            case (int)TagCodeEnum.DefineBits: resTag = new DefineBitsTag(); break;

            case (int)TagCodeEnum.DefineBitsJpeg2: resTag = new DefineBitsJpeg2Tag(); break;

            case (int)TagCodeEnum.DefineBitsJpeg3: resTag = new DefineBitsJpeg3Tag(); break;

            case (int)TagCodeEnum.DefineBitsLossLess: resTag = new DefineBitsLossLessTag(); break;

            case (int)TagCodeEnum.DefineBitsLossLess2: resTag = new DefineBitsLossLess2Tag(); break;

            case (int)TagCodeEnum.DefineButton: resTag = new DefineButtonTag(); break;

            case (int)TagCodeEnum.DefineButton2: resTag = new DefineButton2Tag(); break;

            case (int)TagCodeEnum.DefineButtonCxForm: resTag = new DefineButtonCxFormTag(); break;

            case (int)TagCodeEnum.DefineButtonSound: resTag = new DefineButtonSoundTag(); break;

            case (int)TagCodeEnum.DefineEditText: resTag = new DefineEditTextTag(); break;

            case (int)TagCodeEnum.DefineFont: resTag = new DefineFontTag(); break;

            case (int)TagCodeEnum.DefineFont2: resTag = new DefineFont2Tag(); break;

            case (int)TagCodeEnum.DefineFontInfo: resTag = new DefineFontInfoTag(); break;

            case (int)TagCodeEnum.DefineFontInfo2: resTag = new DefineFontInfo2Tag(); break;

            case (int)TagCodeEnum.DefineMorphShape: resTag = new DefineMorphShapeTag(); break;

            case (int)TagCodeEnum.DefineShape: resTag = new DefineShapeTag(); break;

            case (int)TagCodeEnum.DefineShape2: resTag = new DefineShape2Tag(); break;

            case (int)TagCodeEnum.DefineShape3: resTag = new DefineShape3Tag(); break;

            case (int)TagCodeEnum.DefineSound: resTag = new DefineSoundTag(); break;

            case (int)TagCodeEnum.DefineSprite: resTag = new DefineSpriteTag(); break;

            case (int)TagCodeEnum.DefineText: resTag = new DefineTextTag(); break;

            case (int)TagCodeEnum.DefineText2: resTag = new DefineText2Tag(); break;

            case (int)TagCodeEnum.DefineVideoStream: resTag = new DefineVideoStreamTag(); break;

            case (int)TagCodeEnum.DoAction: resTag = new DoActionTag(); break;

            case (int)TagCodeEnum.EnableDebugger: resTag = new EnableDebuggerTag(); break;

            case (int)TagCodeEnum.EnableDebugger2: resTag = new EnableDebugger2Tag(); break;

            case (int)TagCodeEnum.End: resTag = new EndTag(); break;

            case (int)TagCodeEnum.ExportAssets: resTag = new ExportAssetsTag(); break;

            case (int)TagCodeEnum.FrameLabel: resTag = new FrameLabelTag(); break;

            case (int)TagCodeEnum.ImportAssets: resTag = new ImportAssetsTag(); break;

            case (int)TagCodeEnum.InitAction: resTag = new InitActionTag(); break;

            case (int)TagCodeEnum.JpegTable: resTag = new JpegTableTag(); break;

            case (int)TagCodeEnum.PlaceObject: resTag = new PlaceObjectTag(); break;

            case (int)TagCodeEnum.PlaceObject2:     resTag = new PlaceObject2Tag(); break;

            case (int)TagCodeEnum.Protect: resTag = new ProtectTag(); break;

            case (int)TagCodeEnum.RemoveObject: resTag = new RemoveObjectTag(); break;

            case (int)TagCodeEnum.RemoveObject2: resTag = new RemoveObject2Tag(); break;

            case (int)TagCodeEnum.ScriptLimit: resTag = new ScriptLimitTag(); break;

            case (int)TagCodeEnum.SetBackgroundColor: resTag = new SetBackgroundColorTag(); break;

            case (int)TagCodeEnum.SetTabIndex: resTag = new SetTabIndexTag(); break;

            case (int)TagCodeEnum.ShowFrame: resTag = new ShowFrameTag(); break;

            case (int)TagCodeEnum.SoundStreamBlock: resTag = new SoundStreamBlockTag(); break;

            case (int)TagCodeEnum.SoundStreamHead: resTag = new SoundStreamHeadTag(); break;

            case (int)TagCodeEnum.SoundStreamHead2: resTag = new SoundStreamHead2Tag(); break;

            case (int)TagCodeEnum.StartSound: resTag = new StartSoundTag(); break;

            case (int)TagCodeEnum.Metadata: resTag = new MetadataTag(); break;

            case (int)TagCodeEnum.SymbolClass: resTag = new SymbolClassTag(); break;

            //TODO: Sorenson Codec
            case (int)TagCodeEnum.VideoFrame: resTag = ReadVideoFrameTag(binaryReader, tagList); break;

            default: resTag = new BaseTag(binaryReader.ReadBytes(System.Convert.ToInt32(rh.TagLength + offset)), rh.TagCode); break;
            }

            //Read the data of the current tag
            resTag.ReadData(version, binaryReader);

            //LOG
            long mustRead = rh.TagLength + offset;

            if (posBefore + mustRead != binaryReader.BaseStream.Position)
            {
                binaryReader.BaseStream.Position = posBefore + rh.TagLength + offset;
                if (log.IsErrorEnabled)
                {
                    log.Error(Enum.GetName(TagCodeEnum.DefineBits.GetType(), rh.TagCode) + "....KO");
                }
            }
            else if (log.IsInfoEnabled)
            {
                log.Info(Enum.GetName(TagCodeEnum.DefineBits.GetType(), rh.TagCode) + "....OK (" + mustRead + ")");
            }

            return(resTag);
        }
Пример #8
0
 ITagFormatter ISwfTagVisitor <object, ITagFormatter> .Visit(DefineBitsTag tag, object arg)
 {
     return(new DefineBitsTagFormatter());
 }
Пример #9
0
 /// <summary>
 /// Gets the picture bits tag.
 /// </summary>
 /// <param name="image">Image.</param>
 /// <param name="characterId">Character id.</param>
 /// <returns></returns>
 public static BaseTag GetPictureBitsTag(Image image, ushort characterId)
 {
     return(DefineBitsTag.FromImage(characterId, image));
 }