/// <summary> /// Reads the data. /// </summary> /// <param name="binaryReader">Binary reader.</param> public void ReadData(BufferedBinaryReader binaryReader) { base.SetStartPoint(binaryReader); binaryReader.SynchBits(); bool hasScale = binaryReader.ReadBoolean(); if (hasScale) { uint nScaleBits = binaryReader.ReadUBits(5); matrix[0, 0] = binaryReader.ReadFloat(nScaleBits); matrix[1, 1] = binaryReader.ReadFloat(nScaleBits); } bool hasRotate = binaryReader.ReadBoolean(); if (hasRotate) { uint nRotateBits = binaryReader.ReadUBits(5); matrix[1, 0] = binaryReader.ReadFloat(nRotateBits); matrix[0, 1] = binaryReader.ReadFloat(nRotateBits); } uint nTranslateBits = binaryReader.ReadUBits(5); matrix[0, 2] = (float)binaryReader.ReadSBits(nTranslateBits); matrix[1, 2] = (float)binaryReader.ReadSBits(nTranslateBits); binaryReader.SynchBits(); base.SetEndPoint(binaryReader); }
/// <summary> /// see <see cref="SwfDotNet.IO.Tags.BaseTag">base class</see> /// </summary> public override void ReadData(byte version, BufferedBinaryReader binaryReader) { RecordHeader rh = new RecordHeader(); rh.ReadData(binaryReader); fontId = binaryReader.ReadUInt16(); byte fontNameLen = binaryReader.ReadByte(); fontName = binaryReader.ReadString(fontNameLen); binaryReader.ReadUBits(2); //reserved fontFlagsSmallText = binaryReader.ReadBoolean(); binaryReader.ReadUBits(2); //not used fontFlagsItalic = binaryReader.ReadBoolean(); fontFlagsBold = binaryReader.ReadBoolean(); binaryReader.ReadBoolean(); //not used languageCode = binaryReader.ReadByte(); long codeTableLenght = rh.TagLength - 5 - fontNameLen; codeTable = null; codeTable = new ushort[codeTableLenght]; for (int i = 0; i < codeTableLenght / 2; i++) { codeTable[i] = binaryReader.ReadUInt16(); } }
/// <summary> /// Reads the data. /// </summary> /// <param name="binaryReader">Binary reader.</param> /// <param name="flags">Flags.</param> public void ReadData(BufferedBinaryReader binaryReader, byte flags) { base.SetStartPoint(binaryReader); byte numBits = (byte)(flags & 0x0F); bool generalLineFLag = binaryReader.ReadBoolean(); deltaX = 0; deltaY = 0; if (generalLineFLag) { deltaX = binaryReader.ReadSBits((uint)(numBits + 2)); deltaY = binaryReader.ReadSBits((uint)(numBits + 2)); } else { bool vertLineFlag = binaryReader.ReadBoolean(); if (!vertLineFlag) { deltaX = binaryReader.ReadSBits((uint)(numBits + 2)); } else { deltaY = binaryReader.ReadSBits((uint)(numBits + 2)); } } base.SetEndPoint(binaryReader); }
/// <summary> /// Reads the data. /// </summary> /// <param name="reader">Reader.</param> public void ReadData(BufferedBinaryReader reader) { this.signature = reader.ReadString(3); this.version = reader.ReadByte(); reader.ReadUBits(5); this.hasAudio = reader.ReadBoolean(); reader.ReadBoolean(); this.hasVideo = reader.ReadBoolean(); reader.ReadUInt32(); }
/// <summary> /// Reads the data from a binary reader. /// </summary> /// <param name="binaryReader">Binary reader.</param> public void ReadData(BufferedBinaryReader binaryReader) { binaryReader.ReadBoolean(); this.red = (byte)binaryReader.ReadUBits(5); this.green = (byte)binaryReader.ReadUBits(5); this.blue = (byte)binaryReader.ReadUBits(5); }
private static object ReadValue(BufferedBinaryReader reader, SystemTypeCode type) { switch (type) { case SystemTypeCode.Boolean: return(reader.ReadBoolean()); case SystemTypeCode.Int8: return(reader.ReadInt8()); case SystemTypeCode.UInt8: return(reader.ReadUInt8()); case SystemTypeCode.Int16: return(reader.ReadInt16()); case SystemTypeCode.UInt16: return(reader.ReadUInt16()); case SystemTypeCode.Int32: return(reader.ReadInt32()); case SystemTypeCode.UInt32: return(reader.ReadUInt32()); case SystemTypeCode.Int64: return(reader.ReadInt64()); case SystemTypeCode.UInt64: return(reader.ReadUInt64()); case SystemTypeCode.Single: return(reader.ReadSingle()); case SystemTypeCode.Double: return(reader.ReadDouble()); case SystemTypeCode.Decimal: throw new NotImplementedException(); case SystemTypeCode.DateTime: throw new NotImplementedException(); case SystemTypeCode.Char: return(reader.ReadChar()); case SystemTypeCode.String: return(reader.ReadCountedUtf8()); case SystemTypeCode.Enum: throw new NotImplementedException(); default: throw new ArgumentOutOfRangeException(); } }
/// <summary> /// Reads the data. /// </summary> /// <param name="version">Version.</param> /// <param name="binaryReader">Binary reader.</param> public override void ReadData(byte version, BufferedBinaryReader binaryReader) { base.ReadData(version, binaryReader); this.soundFormat = (FlvSoundFormat)binaryReader.ReadUBits(4); this.soundRate = binaryReader.ReadUBits(2); this.isSnd16Bits = binaryReader.ReadBoolean(); this.isStereo = binaryReader.ReadBoolean(); uint dataLenght = this.dataSize - 1; if (dataLenght > 0) { this.soundData = new byte[dataLenght]; for (int i = 0; i < dataLenght; i++) { this.soundData[i] = binaryReader.ReadByte(); } } }
/// <summary> /// Reads the data. /// </summary> /// <param name="binaryReader">Binary reader.</param> public void ReadData(BufferedBinaryReader binaryReader) { hasAddTerms = binaryReader.ReadBoolean(); hasMultTerms = binaryReader.ReadBoolean(); uint nBits = binaryReader.ReadUBits(4); if (hasMultTerms) { int redMultTerms = binaryReader.ReadSBits(nBits); int greenMultTerms = binaryReader.ReadSBits(nBits); int blueMultTerms = binaryReader.ReadSBits(nBits); } if (hasAddTerms) { int redAddTerms = binaryReader.ReadSBits(nBits); int greenAddTerms = binaryReader.ReadSBits(nBits); int blueAddTerms = binaryReader.ReadSBits(nBits); } }
/// <summary> /// Reads the data. /// </summary> /// <param name="binaryReader">Binary reader.</param> public void ReadData(BufferedBinaryReader binaryReader) { bool hasAddTerms = binaryReader.ReadBoolean(); bool hasMultTerms = binaryReader.ReadBoolean(); uint nBits = binaryReader.ReadUBits(4); if (hasMultTerms) { redMultTerms = binaryReader.ReadSBits(nBits); greenMultTerms = binaryReader.ReadSBits(nBits); blueMultTerms = binaryReader.ReadSBits(nBits); alphaMultTerms = binaryReader.ReadSBits(nBits); } if (hasAddTerms) { redAddTerms = binaryReader.ReadSBits(nBits); greenAddTerms = binaryReader.ReadSBits(nBits); blueAddTerms = binaryReader.ReadSBits(nBits); alphaAddTerms = binaryReader.ReadSBits(nBits); } }
private static object ReadValue(ElementType type, BufferedBinaryReader reader) { switch (type) { case ElementType.Boolean: return(reader.ReadBoolean()); case ElementType.Char: return(reader.ReadChar()); case ElementType.Int8: return(reader.ReadSByte()); case ElementType.UInt8: return(reader.ReadByte()); case ElementType.Int16: return(reader.ReadInt16()); case ElementType.UInt16: return(reader.ReadUInt16()); case ElementType.Int32: return(reader.ReadInt32()); case ElementType.UInt32: return(reader.ReadUInt32()); case ElementType.Int64: return(reader.ReadInt64()); case ElementType.UInt64: return(reader.ReadUInt64()); case ElementType.Single: return(reader.ReadSingle()); case ElementType.Double: return(reader.ReadDouble()); case ElementType.String: return(Encoding.Unicode.GetString(reader.ToArray())); case ElementType.Class: return(null); default: return(reader.ToArray()); } }
/// <summary> /// Reads the data. /// </summary> /// <param name="binaryReader">Binary reader.</param> /// <param name="shapeType">Shape type.</param> public void ReadData(BufferedBinaryReader binaryReader, ShapeType shapeType) { binaryReader.SynchBits(); byte numFillBits = (byte)binaryReader.ReadUBits(4); byte numLineBits = (byte)binaryReader.ReadUBits(4); bool readEndShapeRecord = false; while (!readEndShapeRecord) { bool type = binaryReader.ReadBoolean(); byte flags = (byte)binaryReader.ReadUBits(5); if (type == false) { //Non-edge record if (flags == 0) { //EndShapeRecord readEndShapeRecord = true; this.Add(new EndShapeRecord()); } else { //StyleChangerecord StyleChangeRecord styleChange = new StyleChangeRecord(); styleChange.ReadData(binaryReader, flags, ref numFillBits, ref numLineBits, shapeType); this.Add(styleChange); } } else { //Edge record if ((flags & 0x10) != 0) { //StraightedEdgeRecord StraightEdgeRecord straight = new StraightEdgeRecord(); straight.ReadData(binaryReader, flags); this.Add(straight); } else { //CurvedEdgeRecord CurvedEdgeRecord curved = new CurvedEdgeRecord(); curved.ReadData(binaryReader, flags); this.Add(curved); } } } }
/// <summary> /// see <see cref="SwfDotNet.IO.Tags.BaseTag">base class</see> /// </summary> public override void ReadData(byte version, BufferedBinaryReader binaryReader) { RecordHeader rh = new RecordHeader(); rh.ReadData(binaryReader); characterId = binaryReader.ReadUInt16(); numFrames = binaryReader.ReadUInt16(); width = binaryReader.ReadUInt16(); height = binaryReader.ReadUInt16(); binaryReader.ReadUBits(5); videoFlagsDeblocking = binaryReader.ReadUBits(2); videoFlagsSmoothing = binaryReader.ReadBoolean(); codecId = binaryReader.ReadByte(); }
/// <summary> /// see <see cref="SwfDotNet.IO.Tags.BaseTag">base class</see> /// </summary> public override void ReadData(byte version, BufferedBinaryReader binaryReader) { RecordHeader rh = new RecordHeader(); rh.ReadData(binaryReader); fontId = binaryReader.ReadUInt16(); byte fontNameLen = binaryReader.ReadByte(); fontName = binaryReader.ReadString(fontNameLen); binaryReader.ReadUBits(2); //reserved fontFlagsSmallText = binaryReader.ReadBoolean(); fontFlagsShiftJIS = binaryReader.ReadBoolean(); fontFlagsAINSI = binaryReader.ReadBoolean(); fontFlagsItalic = binaryReader.ReadBoolean(); fontFlagsBold = binaryReader.ReadBoolean(); fontFlagsWildCodes = binaryReader.ReadBoolean(); uint codeTableLenght = rh.TagLength - 4 - fontNameLen; if (!fontFlagsWildCodes) { codeTable = new uint[codeTableLenght]; for (int i = 0; i < codeTableLenght; i++) { codeTable[i] = (uint)binaryReader.ReadByte(); } } else { codeTable = new uint[codeTableLenght / 2]; for (int i = 0; i < codeTableLenght / 2; i++) { codeTable[i] = (uint)binaryReader.ReadUInt16(); } } }
/// <summary> /// Reads the data. /// </summary> /// <param name="binaryReader">Binary reader.</param> public void ReadData(BufferedBinaryReader binaryReader) { binaryReader.ReadUBits(2); syncStop = binaryReader.ReadBoolean(); syncNoMultiple = binaryReader.ReadBoolean(); bool hasEnvelope = binaryReader.ReadBoolean(); bool hasLoops = binaryReader.ReadBoolean(); bool hasOutPoint = binaryReader.ReadBoolean(); bool hasInPoint = binaryReader.ReadBoolean(); if (hasInPoint) { inPoint = binaryReader.ReadUInt32(); } if (hasOutPoint) { outPoint = binaryReader.ReadUInt32(); } if (hasLoops) { loopCount = binaryReader.ReadUInt16(); } if (hasEnvelope) { byte envPoints = binaryReader.ReadByte(); if (envPoints != 0) { envelopeRecord.Clear(); for (int i = 0; i < envPoints; i++) { SoundEnvelope envelope = new SoundEnvelope(); envelope.ReadData(binaryReader); envelopeRecord.Add(envelope); } } } }
/// <summary> /// see <see cref="SwfDotNet.IO.Tags.BaseTag">base class</see> /// </summary> public override void ReadData(byte version, BufferedBinaryReader binaryReader) { RecordHeader rh = new RecordHeader(); rh.ReadData(binaryReader); long startPosition = binaryReader.BaseStream.Position; buttonId = binaryReader.ReadUInt16(); binaryReader.ReadUBits(7); //reserved trackAsMenu = binaryReader.ReadBoolean(); long startPos = binaryReader.BaseStream.Position; actionOffset = binaryReader.ReadUInt16(); if (characters == null) { characters = new ButtonRecordCollection(); } else { characters.Clear(); } bool characterEndFlag = false; while (!characterEndFlag) { byte first = binaryReader.ReadByte(); if (first == 0) { characterEndFlag = true; } else { ButtonRecord buttRecord = new ButtonRecord(); buttRecord.ReadData(binaryReader, first, TagCodeEnum.DefineButton2); characters.Add(buttRecord); } } long curr = startPos + actionOffset; actions = new ButtonCondactionCollection(); bool lastCondAction = false; if (actionOffset == 0) { lastCondAction = true; } while (!lastCondAction) { long readedBytes = binaryReader.BaseStream.Position - startPosition; ushort condActionSize = binaryReader.ReadUInt16(); if (condActionSize == 0) { lastCondAction = true; condActionSize = (ushort)(rh.TagLength - readedBytes); } ButtonCondaction buttCond = new ButtonCondaction(); buttCond.ReadData(binaryReader, condActionSize); actions.Add(buttCond); } }
private object ReadValue(BufferedBinaryReader reader, IType type) { var st = type.SystemType(); if (st != null) { switch (st.Code) { case SystemTypeCode.Boolean: return reader.ReadBoolean(); case SystemTypeCode.Int8: return reader.ReadInt8(); case SystemTypeCode.UInt8: return reader.ReadUInt8(); case SystemTypeCode.Int16: return reader.ReadInt16(); case SystemTypeCode.UInt16: return reader.ReadUInt16(); case SystemTypeCode.Int32: return reader.ReadInt32(); case SystemTypeCode.UInt32: return reader.ReadUInt32(); case SystemTypeCode.Int64: return reader.ReadInt64(); case SystemTypeCode.UInt64: return reader.ReadUInt64(); case SystemTypeCode.Single: return reader.ReadSingle(); case SystemTypeCode.Double: return reader.ReadDouble(); case SystemTypeCode.Char: return reader.ReadChar(); case SystemTypeCode.String: return reader.ReadCountedUtf8(); case SystemTypeCode.Object: //boxed value type var e = (ElementType)reader.ReadInt8(); return ReadValue(reader, e); case SystemTypeCode.Type: return ReadType(reader); } } if (type.TypeKind == TypeKind.Enum) { return ReadValue(reader, type.ValueType); } if (type.IsArray) { int numElem = reader.ReadInt32(); Array arr = null; for (int i = 0; i < numElem; ++i) { var val = ReadValue(reader, type.ElementType); if (arr == null) arr = Array.CreateInstance(val.GetType(), numElem); arr.SetValue(val, i); } return arr; } return null; }
private object ReadValue(BufferedBinaryReader reader, ElementType e) { switch (e) { case ElementType.Boolean: return reader.ReadBoolean(); case ElementType.Char: return reader.ReadChar(); case ElementType.Int8: return reader.ReadSByte(); case ElementType.UInt8: return reader.ReadByte(); case ElementType.Int16: return reader.ReadInt16(); case ElementType.UInt16: return reader.ReadUInt16(); case ElementType.Int32: return reader.ReadInt32(); case ElementType.UInt32: return reader.ReadUInt32(); case ElementType.Int64: return reader.ReadInt64(); case ElementType.UInt64: return reader.ReadUInt64(); case ElementType.Single: return reader.ReadSingle(); case ElementType.Double: return reader.ReadDouble(); case ElementType.String: return reader.ReadCountedUtf8(); case ElementType.Object: case ElementType.CustomArgsBoxedObject: { var elem = (ElementType)reader.ReadInt8(); return ReadValue(reader, elem); } case ElementType.CustomArgsEnum: { string enumTypeName = reader.ReadCountedUtf8(); var enumType = FindType(enumTypeName); if (enumType == null) { //TODO: throw new BadMetadataException(); } return ReadValue(reader, enumType); } case ElementType.CustomArgsType: return ReadType(reader); case ElementType.ArraySz: { var arrElemType = (ElementType)reader.ReadInt8(); return ReadArray(reader, arrElemType); } default: throw new ArgumentOutOfRangeException(); } }
/// <summary> /// Reads the data. /// </summary> /// <param name="binaryReader">Binary reader.</param> /// <param name="endOfRecordsFlag">End of records flag.</param> /// <param name="tagCodeEnum">Tag code enum.</param> public void ReadData(BufferedBinaryReader binaryReader, ref bool endOfRecordsFlag, TagCodeEnum tagCodeEnum) { binaryReader.SynchBits(); bool textRecordType = binaryReader.ReadBoolean(); binaryReader.ReadUBits(3); bool styleFlagsHasFont = binaryReader.ReadBoolean(); bool styleFlagsHasColor = binaryReader.ReadBoolean(); bool styleFlagsHasYOffset = binaryReader.ReadBoolean(); bool styleFlagsHasXOffset = binaryReader.ReadBoolean(); if (textRecordType == false) { endOfRecordsFlag = true; return; } fontId = 0; if (styleFlagsHasFont) { fontId = binaryReader.ReadUInt16(); } textColor = null; if (styleFlagsHasColor) { if (tagCodeEnum == TagCodeEnum.DefineText2) { textColor = new RGBA(); textColor.ReadData(binaryReader); } else { textColor = new RGB(); textColor.ReadData(binaryReader); } } xOffset = 0; if (styleFlagsHasXOffset) { xOffset = binaryReader.ReadInt16(); } yOffset = 0; if (styleFlagsHasYOffset) { yOffset = binaryReader.ReadInt16(); } textHeight = 0; if (styleFlagsHasFont) { textHeight = binaryReader.ReadUInt16(); } byte glyphCount = binaryReader.ReadByte(); if (glyphCount > 0) { if (glyphEntries == null) { glyphEntries = new GlyphEntryCollection(); } else { glyphEntries.Clear(); } for (int i = 0; i < glyphCount; i++) { GlyphEntry glyphEntry = new GlyphEntry(); glyphEntry.ReadData(binaryReader); glyphEntries.Add(glyphEntry); } } }
/// <summary> /// see <see cref="SwfDotNet.IO.Tags.BaseTag">base class</see> /// </summary> public override void ReadData(byte version, BufferedBinaryReader binaryReader) { RecordHeader rh = new RecordHeader(); rh.ReadData(binaryReader); fontId = binaryReader.ReadUInt16(); bool fontFlagsHasLayout = binaryReader.ReadBoolean(); fontFlagsShiftJIS = binaryReader.ReadBoolean(); fontFlagsSmallText = binaryReader.ReadBoolean(); fontFlagsANSI = binaryReader.ReadBoolean(); bool fontFlagsWideOffsets = binaryReader.ReadBoolean(); bool fontFlagsWideCodes = binaryReader.ReadBoolean(); fontFlagsItalic = binaryReader.ReadBoolean(); fontFlagsBold = binaryReader.ReadBoolean(); languageCode = (LanguageCode)binaryReader.ReadByte(); byte fontNameLength = binaryReader.ReadByte(); fontName = binaryReader.ReadString(fontNameLength); ushort numGlyphs = binaryReader.ReadUInt16(); if (numGlyphs > 0) { uint[] offsetTable = new uint[numGlyphs]; for (int i = 0; i < numGlyphs; i++) { if (fontFlagsWideOffsets) { offsetTable[i] = binaryReader.ReadUInt32(); } else { offsetTable[i] = (uint)binaryReader.ReadUInt16(); } } } uint codeTableOffset = 0; if (fontFlagsWideOffsets) { codeTableOffset = binaryReader.ReadUInt32(); } else { codeTableOffset = (uint)binaryReader.ReadUInt16(); } if (numGlyphs > 0) { this.glyphShapesTable.IsWideCodes = fontFlagsWideCodes; this.glyphShapesTable.ReadData(binaryReader, numGlyphs); } if (fontFlagsHasLayout) { fontAscent = binaryReader.ReadInt16(); fontDescent = binaryReader.ReadInt16(); fontLeading = binaryReader.ReadInt16(); if (numGlyphs > 0) { fontAdvanceTable.ReadData(binaryReader, numGlyphs); fontBoundsTable.ReadData(binaryReader, numGlyphs); fontKerningTable.ReadData(binaryReader, fontFlagsWideCodes); } } }
/// <summary> /// see <see cref="SwfDotNet.IO.Tags.BaseTag">base class</see> /// </summary> public override void ReadData(byte version, BufferedBinaryReader binaryReader) { RecordHeader rh = new RecordHeader(); rh.ReadData(binaryReader); bool placeFlagHasClipActions = binaryReader.ReadBoolean(); bool placeFlagHasClipDepth = binaryReader.ReadBoolean(); bool placeFlagHasName = binaryReader.ReadBoolean(); bool placeFlagHasRatio = binaryReader.ReadBoolean(); bool placeFlagHasColorTransform = binaryReader.ReadBoolean(); bool placeFlagHasMatrix = binaryReader.ReadBoolean(); bool placeFlagHasCharacter = binaryReader.ReadBoolean(); placeFlagMove = binaryReader.ReadBoolean(); depth = binaryReader.ReadUInt16(); characterId = 0; if (placeFlagHasCharacter) { characterId = binaryReader.ReadUInt16(); } matrix = null; if (placeFlagHasMatrix) { matrix = new Matrix(); matrix.ReadData(binaryReader); } colorTransform = null; if (placeFlagHasColorTransform) { colorTransform = new CXFormWithAlphaData(); colorTransform.ReadData(binaryReader); } ratio = 0; if (placeFlagHasRatio) { ratio = binaryReader.ReadUInt16() / 65535.0f; } name = null; if (placeFlagHasName) { name = binaryReader.ReadString(); } clipDepth = 0; if (placeFlagHasClipDepth) { clipDepth = binaryReader.ReadUInt16(); } // get bytecode actions clipActions = null; if (placeFlagHasClipActions) { // different behaviour for Flash 6+ actionHead = (version >= 6) ? binaryReader.ReadBytes(6) : binaryReader.ReadBytes(4); // read clip action records to list ArrayList clpAc = new ArrayList(); //ClipActionRec a = null; bool res = true; do { ClipActionRec action = new ClipActionRec(); res = action.ReadData(binaryReader, version); if (res) { clpAc.Add(action); } }while (res); // copy list to array clipActions = new ClipActionRec[clpAc.Count]; clpAc.CopyTo(clipActions, 0); } }