Пример #1
0
        public ImageDecoderIndexed(byte[] pixelData, int width, int height, IndexCodec codec, SKColor[] palette = null, ImageFilter imageFilter = null, PaletteFilter paletteFilter = null)
        {
            this.pixelData = pixelData;
            if (imageFilter != null)
            {
                this.pixelData = imageFilter.Defilter(pixelData);
            }

            this.width      = width;
            this.height     = height;
            this.indexCodec = codec;

            grayScale = new SKColor[1 << codec.BitDepth];

            for (int i = 0; i < grayScale.Length; i++)
            {
                grayScale[i] = new SKColor((byte)(i * (256 / grayScale.Length)), (byte)(i * (256 / grayScale.Length)), (byte)(i * (256 / grayScale.Length)));
            }

            if (paletteFilter != null && palette != null)
            {
                Palette = paletteFilter.Defilter(palette);
            }
            else if (palette == null)
            {
                palette = (SKColor[])grayScale.Clone();
                Palette = palette;
            }
            else
            {
                Palette = (SKColor[])palette.Clone();
            }
        }
Пример #2
0
        private void Init(IndexCodec codec, IComparer <Color> pixelComparer, ColorCodec encoder, ImageFilter imageFilter, PaletteFilter paletteFilter)
        {
            this.codec        = codec;
            this.colorEncoder = encoder;

            this.imageFilter   = imageFilter;
            this.paletteFilter = paletteFilter;
            colors             = 1 << codec.BitDepth;

            if (pixelComparer != null)
            {
                pixelSorter = pixelComparer;
            }
        }
Пример #3
0
        public ImageEncoderIndexed(IList <Color[]> palettes, Image referenceImage, IndexCodec codec, ColorCodec encoder = null, ImageFilter imageFilter = null, PaletteFilter paletteFilter = null)
        {
            fromReference       = true;
            Palettes            = palettes;
            this.referenceImage = referenceImage;

            width  = referenceImage.Width;
            height = referenceImage.Height;

            if (!IsGreyScale(referenceImage))
            {
                throw new ArgumentException("The reference image must be in grey scale!");
            }

            Init(codec, null, encoder, imageFilter, paletteFilter);
        }
Пример #4
0
        private ImageEncoderIndexed(IList <Image> images, IndexCodec codec, IComparer <Color> pixelComparer = null, ColorCodec encoder = null, ImageFilter imageFilter = null, PaletteFilter paletteFilter = null)
        {
            fromReference = false;

            if (images.Count == 0)
            {
                throw new ArgumentException("The image list cannot be empty!");
            }

            width  = images.First().Width;
            height = images.First().Height;

            foreach (Image img in images)
            {
                if (img.Width != width || img.Height != height)
                {
                    throw new ArgumentException("The images are not of the same size!");
                }
            }

            this.images = images;

            Init(codec, pixelComparer, encoder, imageFilter, paletteFilter);
        }
Пример #5
0
 public ImageEncoderIndexed(Image image, IndexCodec codec, IComparer <Color> pixelComparer = null, ColorCodec encoder = null, ImageFilter imageFilter = null, PaletteFilter paletteFilter = null)
     : this(new List <Image>() { image }, codec, pixelComparer, encoder, imageFilter, paletteFilter)
 {
 }