Example #1
0
        /// <summary>
        /// Writes a Graphic Control Extension to the supplied output stream.
        /// </summary>
        /// <param name="frame">
        /// The GifFrame to which this graphic control extension relates.
        /// </param>
        /// <param name="transparentColourIndex">
        /// The index within the active colour table of the transparent colour.
        /// </param>
        /// <param name="outputStream">
        /// The stream to write to.
        /// </param>
        private void WriteGraphicCtrlExt(GifFrame frame,
                                         int transparentColourIndex,
                                         Stream outputStream)
        {
            outputStream.WriteByte(GifComponent.CodeExtensionIntroducer);
            outputStream.WriteByte(GifComponent.CodeGraphicControlLabel);

            // The frame doesn't have have a graphic control extension yet, so we
            // need to work out what it would contain.
            DisposalMethod disposalMethod;
            bool           hasTransparentColour;

            if (_transparent == Color.Empty)              // TODO: remove reference to _transparent - parameterise?
            {
                hasTransparentColour = false;
                disposalMethod       = DisposalMethod.NotSpecified;           // dispose = no action
            }
            else
            {
                // TESTME: WriteGraphicCtrlExt - _transparent != Color.Empty
                hasTransparentColour = true;
                disposalMethod       = DisposalMethod.RestoreToBackgroundColour;           // force clear if using transparent color
            }
            int blockSize = 4;
            GraphicControlExtension gce
                = new GraphicControlExtension(blockSize,
                                              disposalMethod,
                                              frame.ExpectsUserInput,
                                              hasTransparentColour,
                                              frame.Delay,
                                              transparentColourIndex);

            gce.WriteToStream(outputStream);
        }
        public void WriteToStreamTest()
        {
            ReportStart();
            int            blockSize              = 4;
            DisposalMethod disposalMethod         = DisposalMethod.DoNotDispose;
            bool           expectsUserInput       = false;
            bool           hasTransparentColour   = true;
            int            delayTime              = 10;
            int            transparentColourIndex = 6;

            _gce = new GraphicControlExtension(blockSize,
                                               disposalMethod,
                                               expectsUserInput,
                                               hasTransparentColour,
                                               delayTime,
                                               transparentColourIndex);

            MemoryStream s = new MemoryStream();

            _gce.WriteToStream(s);
            s.Seek(0, SeekOrigin.Begin);

            _gce = new GraphicControlExtension(s);

            Assert.AreEqual(ErrorState.Ok, _gce.ConsolidatedState);
            Assert.AreEqual(blockSize, _gce.BlockSize);
            Assert.AreEqual(disposalMethod, _gce.DisposalMethod);
            Assert.AreEqual(expectsUserInput, _gce.ExpectsUserInput);
            Assert.AreEqual(hasTransparentColour, _gce.HasTransparentColour);
            Assert.AreEqual(delayTime, _gce.DelayTime);
            Assert.AreEqual(transparentColourIndex, _gce.TransparentColourIndex);

            ReportEnd();
        }