Exemplo n.º 1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="GifEncoderCore"/> class.
 /// </summary>
 /// <param name="memoryAllocator">The <see cref="MemoryAllocator"/> to use for buffer allocations.</param>
 /// <param name="options">The options for the encoder.</param>
 public GifEncoderCore(MemoryAllocator memoryAllocator, IGifEncoderOptions options)
 {
     this.memoryAllocator = memoryAllocator;
     this.textEncoding    = options.TextEncoding ?? GifConstants.DefaultEncoding;
     this.quantizer       = options.Quantizer;
     this.colorTableMode  = options.ColorTableMode;
     this.ignoreMetadata  = options.IgnoreMetadata;
 }
Exemplo n.º 2
0
        public void NonMutatingEncodePreservesPaletteCount()
        {
            using (var inStream = new MemoryStream(TestFile.Create(TestImages.Gif.Leo).Bytes))
                using (var outStream = new MemoryStream())
                {
                    inStream.Position = 0;

                    var               image         = Image.Load <Rgba32>(inStream);
                    GifMetadata       metaData      = image.Metadata.GetGifMetadata();
                    GifFrameMetadata  frameMetadata = image.Frames.RootFrame.Metadata.GetGifMetadata();
                    GifColorTableMode colorMode     = metaData.ColorTableMode;
                    var               encoder       = new GifEncoder
                    {
                        ColorTableMode = colorMode,
                        Quantizer      = new OctreeQuantizer(new QuantizerOptions {
                            MaxColors = frameMetadata.ColorTableLength
                        })
                    };

                    image.Save(outStream, encoder);
                    outStream.Position = 0;

                    outStream.Position = 0;
                    var clone = Image.Load <Rgba32>(outStream);

                    GifMetadata cloneMetadata = clone.Metadata.GetGifMetadata();
                    Assert.Equal(metaData.ColorTableMode, cloneMetadata.ColorTableMode);

                    // Gifiddle and Cyotek GifInfo say this image has 64 colors.
                    Assert.Equal(64, frameMetadata.ColorTableLength);

                    for (int i = 0; i < image.Frames.Count; i++)
                    {
                        GifFrameMetadata ifm  = image.Frames[i].Metadata.GetGifMetadata();
                        GifFrameMetadata cifm = clone.Frames[i].Metadata.GetGifMetadata();

                        Assert.Equal(ifm.ColorTableLength, cifm.ColorTableLength);
                        Assert.Equal(ifm.FrameDelay, cifm.FrameDelay);
                    }

                    image.Dispose();
                    clone.Dispose();
                }
        }