private void ConstructorStreamEndOfStreamTest(bool xmlDebugging) { Size screenSize = new Size(12, 4); bool hasGlobalColourTable = false; int colourResolution = 3; bool globalColourTableIsSorted = true; int globalColourTableSizeBits = 4; int backgroundColourIndex = 2; int pixelAspectRatio = 1; _lsd = new LogicalScreenDescriptor(screenSize, hasGlobalColourTable, colourResolution, globalColourTableIsSorted, globalColourTableSizeBits, backgroundColourIndex, pixelAspectRatio); MemoryStream s = new MemoryStream(); _lsd.WriteToStream(s); s.SetLength(s.Length - 1); // remove final byte from stream s.Seek(0, SeekOrigin.Begin); _lsd = new LogicalScreenDescriptor(s, xmlDebugging); Assert.AreEqual(ErrorState.EndOfInputStream, _lsd.ConsolidatedState); Assert.AreEqual(screenSize, _lsd.LogicalScreenSize); Assert.AreEqual(hasGlobalColourTable, _lsd.HasGlobalColourTable); Assert.AreEqual(colourResolution, _lsd.ColourResolution); Assert.AreEqual(globalColourTableIsSorted, _lsd.GlobalColourTableIsSorted); Assert.AreEqual(globalColourTableSizeBits, _lsd.GlobalColourTableSizeBits); Assert.AreEqual(backgroundColourIndex, _lsd.BackgroundColourIndex); Assert.AreEqual(-1, _lsd.PixelAspectRatio); if (xmlDebugging) { Assert.AreEqual(ExpectedDebugXml, _lsd.DebugXml); } }
public void WriteToStreamTest() { ReportStart(); Size screenSize = new Size(12, 4); bool hasGlobalColourTable = false; int colourResolution = 3; bool globalColourTableIsSorted = true; int globalColourTableSizeBits = 4; int backgroundColourIndex = 2; int pixelAspectRatio = 1; _lsd = new LogicalScreenDescriptor(screenSize, hasGlobalColourTable, colourResolution, globalColourTableIsSorted, globalColourTableSizeBits, backgroundColourIndex, pixelAspectRatio); MemoryStream s = new MemoryStream(); _lsd.WriteToStream(s); s.Seek(0, SeekOrigin.Begin); _lsd = new LogicalScreenDescriptor(s); Assert.AreEqual(ErrorState.Ok, _lsd.ConsolidatedState); Assert.AreEqual(screenSize, _lsd.LogicalScreenSize); Assert.AreEqual(hasGlobalColourTable, _lsd.HasGlobalColourTable); Assert.AreEqual(colourResolution, _lsd.ColourResolution); Assert.AreEqual(globalColourTableIsSorted, _lsd.GlobalColourTableIsSorted); Assert.AreEqual(globalColourTableSizeBits, _lsd.GlobalColourTableSizeBits); Assert.AreEqual(backgroundColourIndex, _lsd.BackgroundColourIndex); Assert.AreEqual(pixelAspectRatio, _lsd.PixelAspectRatio); ReportEnd(); }
/// <summary> /// Writes a Logical Screen Descriptor to the supplied stream. /// Also writes a global colour table if required. /// </summary> /// <param name="outputStream"> /// The stream to write to. /// </param> private void WriteLogicalScreenDescriptor(Stream outputStream) { bool hasGlobalColourTable = _strategy == ColourTableStrategy.UseGlobal; int colourResolution = 7; // TODO: parameterise colourResolution? bool globalColourTableIsSorted = false; // Sorting of colour tables is not currently supported int backgroundColorIndex = 0; // TODO: parameterise backgroundColourIndex? int pixelAspectRatio = 0; // TODO: parameterise pixelAspectRatio? if (_strategy == ColourTableStrategy.UseGlobal) { if (_quantizerType == QuantizerType.UseSuppliedPalette) { // use supplied palette _globalColourTable = new ColourTable(); //AddCounter( buildColourTableCounterText, // _palette.Count ); int paletteIndex = 0; foreach (Color c in _palette) { _globalColourTable.Add(c); //MyProgressCounters[buildColourTableCounterText].Value //= paletteIndex; paletteIndex++; } _globalColourTable.Pad(); //RemoveCounter( buildColourTableCounterText ); } else { // Analyse the pixels in all the images to build the // global colour table. Collection <Image> images = new Collection <Image>(); foreach (GifFrame thisFrame in _frames) { Image thisImage = thisFrame.TheImage; images.Add(thisImage); } _pixelAnalysis = new PixelAnalysis(images); _pixelAnalysis.ColourQuality = _quality; _pixelAnalysis.Analyse(); _globalColourTable = _pixelAnalysis.ColourTable; } LogicalScreenDescriptor lsd = new LogicalScreenDescriptor(_logicalScreenSize, hasGlobalColourTable, colourResolution, globalColourTableIsSorted, _globalColourTable.SizeBits, backgroundColorIndex, pixelAspectRatio); lsd.WriteToStream(outputStream); _globalColourTable.WriteToStream(outputStream); } else { LogicalScreenDescriptor lsd = new LogicalScreenDescriptor(_logicalScreenSize, hasGlobalColourTable, colourResolution, globalColourTableIsSorted, 7, backgroundColorIndex, pixelAspectRatio); lsd.WriteToStream(outputStream); } }