Пример #1
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="output"></param>
        public override void Write( Stream output )
        {
            BinaryWriter bw = new BinaryWriter( output );
            bw.Write( ( byte )_FilterType );

            bw.Write( ( byte )_GradientColors.Count );
            for ( int i = 0; i < _GradientColors.Count; i++ )
            {
                _GradientColors[ i ].Write( output );
            }
            for ( int i = 0; i < _GradientRatio.Count; i++ )
            {
                bw.Write( _GradientRatio[ i ] );
            }
            bw.Write( _BlurX );
            bw.Write( _BlurY );
            bw.Write( _Angle );
            bw.Write( _Distance );
            bw.Write( _Strength );
            BitStream bits = new BitStream( output );
            bits.WriteBits( 1, ( _InnerShadow ? 1 : 0 ) );
            bits.WriteBits( 1, ( _KnockOut ? 1 : 0 ) );
            bits.WriteBits( 1, ( _CompositeSource ? 1 : 0 ) );
            bits.WriteBits( 1, ( _OnTop ? 1 : 0 ) );
            bits.WriteBits( 4, _Passes );
            bits.WriteFlush();
        }
Пример #2
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="output"></param>
        public override void Write( Stream output )
        {
            BinaryWriter bw = new BinaryWriter( output );
            bw.Write( ( byte )_FilterType );

            bw.Write( _MatrixX );
            bw.Write( _MatrixY );
            bw.Write( _DivisorFLOAT );
            bw.Write( _BiasFLOAT );

            if ( _MatrixValues.Count != ( _MatrixX * _MatrixY ) )
            {
                IndexOutOfRangeException e = new IndexOutOfRangeException( "_MatrixValues does not have " + (_MatrixX*_MatrixY).ToString("d") + " entries, does have " + _MatrixValues.Count.ToString( "d" ) );
                throw e;
            }

            for ( int i = 0; i < _MatrixValues.Count; i++ )
            {
                bw.Write( _MatrixValues[ i ] );
            }

            _DefaultColor.Write( output );
            BitStream bits = new BitStream( output );
            bits.WriteBits( 6, 0 );
            bits.WriteBits( 1, ( _Clamp ? 1 : 0 ) );
            bits.WriteBits( 1, ( _PreserveAlpha ? 1 : 0 ) );
            bits.WriteFlush();
        }
Пример #3
0
        /// <summary>
        /// Writes this object back to a stream
        /// </summary>
        /// <param name="output">The stream to write to.</param>
        public void Write(Stream output)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

            BitStream bits = new BitStream(output);

            bits.WriteBits(17, (Int32)this._pictureStartCode);
            bits.WriteBits(5, (Int32)this._version);
            bits.WriteBits(8, (Int32)this._temporalReference);
            bits.WriteBits(3, (Int32)this._pictureSize);

            if (this._pictureSize.Equals(0))
            {
                bits.WriteBits(8, (Int32)this._customWidth);
                bits.WriteBits(8, (Int32)this._customHeight);
            }
            else if (this._pictureSize.Equals(1))
            {
                bits.WriteBits(16, (Int32)this._customWidth);
                bits.WriteBits(16, (Int32)this._customHeight);
            }
            else
            {
                SwfFormatException e = new SwfFormatException("Not supported picture size.");
                log.Error(e.Message);
                throw e;
            }

            bits.WriteBits(2, (Int32)this._pictureType);
            bits.WriteBits(1, Convert.ToInt32(this._deblockingFlag));
            bits.WriteBits(5, (Int32)this._quantizer);
            bits.WriteBits(1, Convert.ToInt32(this._extraInformationFlag));
            bits.WriteFlush();

            if (this._extraInformationFlag)
            {
                for (int i = 0; i < this._extraInformation.Count; i++)
                {
                    output.WriteByte(this._extraInformation[i]);
                }
            }

            this._macroBlock.Write(output);
               // this._pictureStuffing.Write(output);
        }
Пример #4
0
        /// <summary>
        /// Renders the DefineFuntion parameters back to a output stream
        /// </summary>
        /// <param name="outputStream">The outputstream</param>
        /// <returns>The output stream position</returns>
        protected override ulong Render( BinaryWriter outputStream )
        {
            long pos = outputStream.BaseStream.Position;

            Helper.SwfStrings.SwfWriteString( this.Version, outputStream, _functionName );
            _numParams = ( ushort )_Parameters.Count;
            outputStream.Write( _numParams );
            outputStream.Write( _numRegister );

            BitStream bits = new BitStream( outputStream.BaseStream );
            bits.WriteBits( 1, ( _PreloadParentFlag ? 1 : 0 ) );
            bits.WriteBits( 1, ( _PreloadRootFlag ? 1 : 0 ) );
            bits.WriteBits( 1, ( _SuppressSuperFlag ? 1 : 0 ) );
            bits.WriteBits( 1, ( _PreloadSuperFlag ? 1 : 0 ) );
            bits.WriteBits( 1, ( _SuppressArgumentsFlag ? 1 : 0 ) );
            bits.WriteBits( 1, ( _PreloadArgumentsFlag ? 1 : 0 ) );
            bits.WriteBits( 1, ( _SuppressThisFlag ? 1 : 0 ) );
            bits.WriteBits( 1, ( _PreloadThisFlag ? 1 : 0 ) );
            bits.WriteBits( 7, 0 );
            bits.WriteBits( 1, ( _PreloadGlobalFlag ? 1 : 0 ) );
            bits.WriteFlush();

            for ( int i = 0; i < _Parameters.Count; i++ )
            {
                outputStream.Write( _Parameters[ i ].Register );
                Helper.SwfStrings.SwfWriteString( this.Version, outputStream, _Parameters[ i ].ParamName );
            }

            outputStream.Write( _codeSize );

            return ( ulong )( outputStream.BaseStream.Position - pos );
        }
Пример #5
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="output"></param>
        public override void Write(Stream output)
        {
            this.WriteTagHeader(output);
            BinaryWriter bw = new BinaryWriter(output);

            bw.Write(this._fontID);
            bw.Write(this._fontNameLen);
            bw.Write(this._fontName);

            BitStream bits = new BitStream(output);

            bits.WriteBits(2, 0); // reserved bits

            bits.WriteBits(1, Convert.ToInt32(this._fontFlagsSmallText));
            bits.WriteBits(1, Convert.ToInt32(this._fontFlagsShiftJIS));
            bits.WriteBits(1, Convert.ToInt32(this._fontFlagsANSI));
            bits.WriteBits(1, Convert.ToInt32(this._fontFlagsItalic));
            bits.WriteBits(1, Convert.ToInt32(this._fontFlagsBold));
            bits.WriteBits(1, Convert.ToInt32(this._fontFlagsWideCodes));
            bits.WriteFlush();

            if (this._fontFlagsWideCodes)
            {
                for (int i = 0; i < this._wideCodeTable.Length; i++)
                {
                    bw.Write(this._wideCodeTable[i]);
                }
            }
            else
            {
                for (int i = 0; i < this._codeTable.Length; i++)
                {
                    bw.Write(this._codeTable[i]);
                }
            }
        }
Пример #6
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="output"></param>
        public override void Write(Stream output)
        {
            this.WriteTagHeader(output);

            long pos = output.Position;

            BitStream bits = new BitStream(output);
            bits.WriteBits(1, (_PlaceFlagHasClipActions ? 1 : 0));
            bits.WriteBits(1, (_PlaceFlagHasClipDepth ? 1 : 0));
            bits.WriteBits(1, (_PlaceFlagHasName ? 1 : 0));
            bits.WriteBits(1, (_PlaceFlagHasRatio ? 1 : 0));
            bits.WriteBits(1, (_PlaceFlagHasColorTransform ? 1 : 0));
            bits.WriteBits(1, (_PlaceFlagHasMatrix ? 1 : 0));
            bits.WriteBits(1, (_PlaceFlagHasCharacter ? 1 : 0));
            bits.WriteBits(1, (_PlaceFlagMove ? 1 : 0));
            bits.WriteFlush();

            BinaryWriter bw = new BinaryWriter(output);
            bw.Write(_Depth);

            if (_PlaceFlagHasCharacter)
                bw.Write(_CharacterID);

            if (_PlaceFlagHasMatrix)
                base._TransformMatrix.Write(output);

            if (_PlaceFlagHasColorTransform)
                _CxFormWithAlpha.Write(output);

            if (_PlaceFlagHasRatio)
                bw.Write(_Ratio);

            if (_PlaceFlagHasName)
                Helper.SwfStrings.SwfWriteString(this.Version, bw, _Name);

            if (_PlaceFlagHasClipDepth)
                bw.Write(_ClipDepth);

            if (this.Version >= 5)
            {
                if (_PlaceFlagHasClipActions)
                    _ClipActions.Write(output);
            }
        }
Пример #7
0
        //
        // We have to do the rendering inside this class, as we are not
        // inhereting from AbstractTagCodeHandler
        //
        private MemoryStream Render( byte version )
        {
            MemoryStream ms = new MemoryStream();
            BinaryWriter bw = new BinaryWriter( ms );

            bw.Write( this._buttonID );
            BitStream bits = new BitStream( ms );
            // reserved Bits and flags
            bits.WriteBits( 7, 0 );
            bits.WriteBits( 1, ( this._trackAsMenu ? 1 : 0 ) );
            bits.WriteFlush();

            if ( 0 == this._actions.Count )
            {
                //
                // resetting this value. It could be that we used to have
                // actions in this button but they got nuked when an exception
                // was raised during their parsing.
                //
                this._actionOffset = 0;
            }
            else
            {
                int charactersSum = 0;
                for ( int i = 0; i < this._characters.Count; i++ )
                {
                    charactersSum += ( int )_characters[ i ].Length;
                }
                charactersSum++; // EndCharacter

                this._actionOffset = ( ushort )charactersSum;
                this._actionOffset += sizeof( ushort ); // The ActionOffset field itself
            }
            bw.Write( this._actionOffset );

            for ( int i = 0; i < this._characters.Count; i++ )
            {
                this._characters[ i ].Write( ms, version );
            }
            bw.Write( ( byte )0x00 ); // EndCharacter

            for ( int i = 0; i < this._actions.Count; i++ )
            {
                this._actions[ i ].Write( ms, version, ( ( i + 1 ) == this._actions.Count ? true : false ) );
            }

            return ms;
        }
Пример #8
0
        /// <summary>
        /// Writes this object back to a stream
        /// </summary>
        /// <param name="output">The stream to write to.</param>
        public override void Write(Stream output)
        {
            BinaryWriter bw = new BinaryWriter(output);

            this.WriteTagHeader(output);

            bw.Write(this._textID);

            BitStream bits = new BitStream(output);

            bits.WriteBits(2, (Int32)this._useFlashType);
            bits.WriteBits(3, (Int32)this._gridFit);
            bits.WriteBits(3, 0); // reserved
            bits.WriteFlush();

            bits.WriteBitsFB(32, this._thickness);
            bits.WriteBitsFB(32, this._sharpness);

            output.WriteByte(0); // reserved byte
        }
Пример #9
0
        /// <summary>
        /// Renders a try statement back to an output stream
        /// </summary>
        /// <param name="outputStream">The output stream</param>
        /// <returns>The output stream position</returns>
        protected override ulong Render( System.IO.BinaryWriter outputStream )
        {
            long pos = outputStream.BaseStream.Position;

            BitStream bits = new BitStream( outputStream.BaseStream );
            bits.WriteBits( 5, 0 );
            bits.WriteBits( 1, ( _CatchInRegisterFlag ? 1 : 0 ) );
            bits.WriteBits( 1, ( _FinallyBlockFlag ? 1 : 0 ) );
            bits.WriteBits( 1, ( _CatchBlockFlag ? 1 : 0 ) );
            bits.WriteFlush();

            outputStream.Write( _trySize );
            outputStream.Write( _catchSize );
            outputStream.Write( _finallySize );

            if ( _CatchInRegisterFlag )
            {
                outputStream.Write( _catchRegister );
            }
            else
            {
                Helper.SwfStrings.SwfWriteString( this.Version, outputStream, _catchName );
            }

            return ( ulong )( outputStream.BaseStream.Position - pos );
        }
Пример #10
0
        /// <summary>
        /// Writes the method and the flags back to an outputstream
        /// </summary>
        /// <param name="outputStream">The output stream</param>
        /// <returns>One(1)</returns>
        protected override ulong Render( System.IO.BinaryWriter outputStream )
        {
            BitStream bits = new BitStream( outputStream.BaseStream );

            bits.WriteBits( 2, ( int )( ( byte )_sendVarsMethod ) );
            bits.WriteBits( 4, 0 );
            bits.WriteBits( 1, ( _loadTargetFlag ? 1 : 0 ) );
            bits.WriteBits( 1, ( _loadVariablesFlag ? 1 : 0 ) );
            bits.WriteFlush();

            return 1;
        }
Пример #11
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="output"></param>
        public override void Write( Stream output )
        {
            BinaryWriter bw = new BinaryWriter( output );
            bw.Write( ( byte )_FilterType );

            _GlowColor.Write( output );

            bw.Write( _BlurX );
            bw.Write( _BlurY );
            bw.Write( _Strength );
            BitStream bits = new BitStream( output );
            bits.WriteBits( 1, ( _InnerGlow ? 1 : 0 ) );
            bits.WriteBits( 1, ( _KnockOut ? 1 : 0 ) );
            bits.WriteBits( 1, ( _CompositeSource ? 1 : 0 ) );
            bits.WriteBits( 5, _Passes );
            bits.WriteFlush();
        }
Пример #12
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="output"></param>
        protected virtual void WriteFlags(Stream output)
        {
            BinaryWriter bw = new BinaryWriter(output);
            BitStream bits = new BitStream(output);

            bw.Write(this._fontID);

            bits.WriteBits(1, this._fontFlagsHasLayout ? 1 : 0);
            bits.WriteBits(1, this._fontFlagsShiftJIS ? 1 : 0);
            bits.WriteBits(1, this._fontFlagsSmallText ? 1 : 0);
            bits.WriteBits(1, this._fontFlagsANSI ? 1 : 0);

            bits.WriteBits(1, this._fontFlagsWideOffsets ? 1 : 0);
            bits.WriteBits(1, this._fontFlagsWideCodes ? 1 : 0);
            bits.WriteBits(1, this._fontFlagsItalic ? 1 : 0);
            bits.WriteBits(1, this._fontFlagsBold ? 1 : 0);
            bits.WriteFlush();

            if (this._SwfVersion <= 5)
            {
                bw.Write((byte)0);
            }
            else
            {
                bw.Write((byte)this._languageCode);
            }

            bw.Write(this._fontNameLen);
            output.Write(this._fontName, 0, this._fontName.Length);

            bw.Write(this._numberOfGlyphs);

            if (this._hasGlyphs)
            {
                if (this._fontFlagsWideOffsets)
                {
                    for (int i = 0; i < this._wideOffsetTable.Length; i++)
                    {
                        bw.Write(this._wideOffsetTable[i]);
                    }

                    bw.Write(this._wideCodeTableOffset);
                }
                else
                {
                    for (int i = 0; i < this._offsetTable.Length; i++)
                    {
                        bw.Write(this._offsetTable[i]);
                    }

                    bw.Write(this._codeTableOffset);
                }

                for (int i = 0; i < this._glyphShapeTable.Length; i++)
                {
                    this._glyphShapeTable[i].Write(output);
                }
            }
        }
Пример #13
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="output"></param>
        public override void Write(Stream output)
        {
            //Log.Debug(this, "Writing DefineSound Tag");

            WriteTagHeader(output);

            byte[] id = BitConverter.GetBytes(this._soundID);
            output.Write(id, 0, 2);
            output.Flush();
            BitStream bits = new BitStream(output);

            bits.WriteBits(4, getFormatID(this._soundFormat));
            bits.WriteBits(2, getSoundRateID(this._soundRate));
            bits.WriteBits(1, this._soundSize == SoundSize.snd_8bit ?0 :1);
            bits.WriteBits(1, this._soundType == SoundType.mono ?0 :1);

            bits.WriteFlush();

            byte[] size = BitConverter.GetBytes(this._soundSampleCount);
            output.Write(size, 0, 4);
            output.Write(this._soundData, 0, this._soundData.Length);
            output.Flush();
        }
Пример #14
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="output"></param>
        public override void Write(Stream output)
        {
            this.WriteTagHeader(output);
            BinaryWriter bw = new BinaryWriter(output);
            bw.Write(_fontID);

            BitStream bits = new BitStream(output);

            bits.WriteBits(2, (Int32)this._CSMTableHint);
            bits.WriteBits(6, 0);
            bits.WriteFlush();

            try
            {
                for (int i = 0; i < this._ZoneTable.Length; i++)
                {
                    this._ZoneTable[i].Write(output);
                }
            }
            catch(Exception ex)
            {
                Log.Warn(this,ex.Message);
            }
        }
Пример #15
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="output"></param>
        public override void Write( Stream output )
        {
            BinaryWriter bw = new BinaryWriter( output );
            bw.Write( ( byte )_FilterType );

            _ShadowColor.Write( output );
            _HighlightColor.Write( output );

            bw.Write( _BlurX );
            bw.Write( _BlurY );
            bw.Write( _Angle );
            bw.Write( _Distance );
            bw.Write( _Strength );
            BitStream bits = new BitStream( output );
            bits.WriteBits( 1, ( _InnerShadow ? 1 : 0 ) );
            bits.WriteBits( 1, ( _KnockOut ? 1 : 0 ) );
            bits.WriteBits( 1, ( _CompositeSource ? 1 : 0 ) );
            bits.WriteBits( 1, ( _OnTop ? 1 : 0 ) );
            bits.WriteBits( 4, _Passes );
            bits.WriteFlush();
        }
Пример #16
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="output"></param>
        public override void Write( Stream output )
        {
            BinaryWriter bw = new BinaryWriter( output );
            bw.Write( ( byte )_FilterType );

            bw.Write( _BlurX );
            bw.Write( _BlurY );
            BitStream bits = new BitStream( output );
            bits.WriteBits( 5, _Passes );
            bits.WriteBits( 3, 0 );
            bits.WriteFlush();
        }
Пример #17
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="output"></param>
        public override void Write(Stream output)
        {
            this.WriteTagHeader(output);

            BinaryWriter bw = new BinaryWriter(output);

            bw.Write(this._characterID);

            this._startBounds.Write(output);
            this._endBounds.Write(output);

            this._startEdgeBounds.Write(output);
            this._endEdgeBounds.Write(output);

            BitStream bits = new BitStream(output);

            bits.WriteBits(6, 0); //reserved
            bits.WriteBits(1, Convert.ToInt32( this._usesNonScalingStrokes));
            bits.WriteBits(1, Convert.ToInt32(this._usesScalingStrokes));
            bits.WriteFlush();

            bw.Write(this._offset);

            if (!_readingFailed)
            {
                this._morphFillStyles.Write(output);
                this._morphLineStyles.Write(output);
                this._startEdges.Write(output);
            }
            else
            {
                output.Write(failBuffer, 0, failBuffer.Length);
            }

            this._endEdges.Write(output);
        }
Пример #18
0
        public override void Write(Stream output)
        {
            WriteTagHeader(output);

            BitStream bits = new BitStream(output);
            bits.WriteBits(4, 0);
            bits.WriteBits(2, DefineSound.getSoundRateID(PlaybackRate));
            bits.WriteBits(1, PlaybackSize == SoundSize.snd_8bit ? 0 : 1);
            bits.WriteBits(1, PlaybackType == SoundType.mono ? 0 : 1);

            bits.WriteBits(4, DefineSound.getFormatID(StreamCompression));
            bits.WriteBits(2, DefineSound.getSoundRateID(StreamRate));
            bits.WriteBits(1, StreamSize == SoundSize.snd_8bit ? 0 : 1);
            bits.WriteBits(1, StreamType == SoundType.mono ? 0 : 1);

            bits.WriteFlush();

            BinaryWriter bw = new BinaryWriter(output);

            bw.Write(AvarageCount);

            if(StreamCompression == SoundEncoding.MP3)
                bw.Write(this.LatencySeek);
        }
Пример #19
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="output"></param>
        public override void Write(Stream output)
        {
            BinaryWriter bw = new BinaryWriter(output);

            this.WriteTagHeader(output);

            bw.Write(this._fontID);

            BitStream bits = new BitStream(output);
            bits.WriteBits(5,0); // reserved
            bits.WriteBits(1, Convert.ToInt32( this._fontFlagsHasFontData));
            bits.WriteBits(1, Convert.ToInt32( this._fontFlagsItalic));
            bits.WriteBits(1, Convert.ToInt32(this._fontFlagsBold));
            bits.WriteFlush();

            SwfStrings.SwfWriteString(this._SwfVersion, bw, this._fontName);

            output.Write(this._restOfTheRecord, 0, this._restOfTheRecord.Length);
        }
Пример #20
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="output"></param>
        public override void Write(Stream output)
        {
            //Log.Debug(this, "Write called");

            WriteTagHeader(output);

            BitStream bits = new BitStream(output);
            bits.WriteBits(1, 0);
            bits.WriteBits(1, (_UseDirectBlit ? 1 : 0));
            bits.WriteBits(1, (_UseGPU ? 1 : 0));
            bits.WriteBits(1, (_HasMetadata ? 1 : 0));
            bits.WriteBits(1, (_ActionScript3 ? 1 : 0));
            bits.WriteBits(2, 0);
            bits.WriteBits(1, (_UseNetwork ? 1 : 0));
            bits.WriteBits(24, 0);
            bits.WriteFlush();
        }
Пример #21
0
        /// <summary>
        /// Renders scene bias and play-flag back to an output stream
        /// </summary>
        /// <param name="outputStream">The output stream</param>
        /// <returns>The position of the output stream</returns>
        protected override ulong Render( System.IO.BinaryWriter outputStream )
        {
            long pos = outputStream.BaseStream.Position;

            BitStream bits = new BitStream( outputStream.BaseStream );
            bits.WriteBits( 6, 0 );
            bits.WriteBits( 1, ( _sceneBias ? 1 : 0 ) );
            bits.WriteBits( 1, ( _play ? 1 : 0 ) );
            bits.WriteFlush();

            if ( _sceneBias )
            {
                outputStream.Write( _sceneBiasAmount );
            }

            return ( ulong )( outputStream.BaseStream.Position - pos );
        }