private static void TagEquals(SwfTag tag1, SwfTag tag2, string msg) { var data1 = tag1.GetData(); var data2 = tag2.GetData(); Assert.AreEqual(data1, data2, msg); }
public void Parse(byte[] data) { { SwfHeader header; RawData = SwfHeader.GetHeader(data, out header); Header = header; } int offset = Header.HeaderLength; Tags = new List <SwfTag>(); while (true) { SwfTag tag = GetTag(RawData, offset); if (tag == null) { break; } Tags.Add(tag); offset += tag.Length; } }
private static Image HandleImageTag(SwfTag tag) { return(tag.Code switch { SwfTagCode.DefineBitsLossless => HandleLossless(tag, false), SwfTagCode.DefineBitsLossless2 => HandleLossless(tag, true), SwfTagCode.DefineBitsJpeg3 => HandleJpeg3(tag), SwfTagCode.DefineBitsJpeg2 => HandleJpeg2(tag), _ => throw new Exception($"Didn't handle code type {tag.Code}"), });
private static void CheckCharacter(SwfTag tag) { if (tag == null) { throw new ArgumentNullException("tag"); } var obj = tag as ISwfCharacter; if (obj == null) { throw Errors.SWF.TagIsNotCharacter.CreateException(); } }
private void AddImport(SwfTag tag, SwfTag mytag) { tag.ImportedTag = mytag; //_importMap[tag] = mytag; //NOTE: Definition tags (such as DefineShape) are not allowed in the DefineSprite tag. All of the //characters that control tags refer to in the sprite must be defined in the main body of the file //before the sprite is defined. if (_spriteStack.Count > 0 && !SwfTag.IsCharacter(mytag.TagCode)) { var sprite = _spriteStack.Peek(); sprite.Tags.Add(mytag); } else { Tags.Add(mytag); } }
internal static SwfTag GetTag(byte[] data, int offset) { switch (SwfTag.GetTagCode(data, offset)) { case TagType.DefineBits: return(new DefineBits(data, offset)); case TagType.DefineBitsJPEG2: return(new DefineBitsJPEG2(data, offset)); case TagType.DefineBitsJPEG3: return(new DefineBitsJPEG3(data, offset)); case TagType.DefineBitsLossless: return(new DefineBitsLossless(data, offset)); case TagType.DefineBitsLossless2: return(new DefineBitsLossless2(data, offset)); case TagType.DefineSound: return(new DefineSound(data, offset)); case TagType.PlaceObject2: return(new PlaceObject2(data, offset)); case TagType.DefineShape: return(new DefineShape(data, offset)); case TagType.DefineSprite: return(new DefineSprite(data, offset)); case TagType.DefineBinaryData: return(new DefineBinaryData(data, offset)); case TagType.End: return(null); default: return(new UndefinedTag(data, offset)); } }
private static void TestReadWriteShapes(string resname) { var rs = typeof(SwfIOTest).GetResourceStream(resname); if (rs == null) { return; } var ms = rs.ToMemoryStream(); var swf1 = new SwfMovie(ms, SwfTagDecodeOptions.DonotDecodeTags); ms.Position = 0; var swf2 = new SwfMovie(ms); Assert.AreEqual(swf1.Tags.Count, swf2.Tags.Count, resname + "#count"); int n = swf1.Tags.Count; for (int i = 0; i < n; ++i) { var tag1 = swf1.Tags[i]; var tag2 = swf2.Tags[i]; if (SwfTag.IsShape(tag1.TagCode)) { string msg; var c = tag2 as ISwfCharacter; if (c != null) { msg = string.Format("{0}, #{1}, {2}, {3} - {4}", resname, i, tag1.TagCode, c.CharacterId, c.Name); } else { msg = string.Format("{0}, #{1}, {2}", resname, i, tag1.TagCode); } TagEquals(tag1, tag2, msg); } } }
public SwfTag Import(SwfMovie from, SwfTag tag) { if (from == null) { throw new ArgumentNullException("from"); } if (tag == null) { throw new ArgumentNullException("tag"); } var mytag = GetImportedTag(tag); if (mytag != null) { Debug.Assert(Tags.Contains(mytag)); return(mytag); } if (tag.TagCode == SwfTagCode.DefineSprite) { var sprite = tag as SwfSprite; if (sprite == null) { throw new InvalidOperationException(); } return(ImportSprite(from, sprite)); } mytag = tag.Clone(); mytag.ImportDependencies(from, this); var obj = mytag as ISwfCharacter; if (obj != null) { obj.CharacterId = NewCharacterID(); } AddImport(tag, mytag); return(mytag); }
private static SwfTag GetImportedTag(SwfTag tag) { //return _importMap[tag] as SwfTag; return(tag.ImportedTag); }