Example #1
0
        public static (byte[] indexedData, uint[] palette) QuantizeImage(int[] imageData, int maxColors)
        {
            WuQuantizer quantizer = new WuQuantizer();

            quantizer.BuildHistogram(imageData);
            quantizer.CalculateCumulativeMoments();
            var boxes       = quantizer.SplitData(maxColors);
            var palette     = quantizer.BuildPalette(boxes).ToArray();
            var fullPalette = new uint[256];

            Array.Copy(palette, fullPalette, palette.Length);
            return(LookupPixels(imageData, palette), fullPalette);
        }
Example #2
0
        private void WriteIndexedPixels(Binary binary)
        {
            (byte[] indexedData, uint[] palette) = WuQuantizer.QuantizeImage(PixelData, 0x100);
            Order order = new Order(Width, Height);

            for (int n = 0; n < Width * Height; n++)
            {
                int x, y;
                (x, y) = order.GetXY();
                byte b = indexedData[y * Stride + x];
                binary.WriteByte(b);
            }
            for (int i = 0; i < 0x100; i++)
            {
                binary.WriteByte((byte)((palette[i] & 0xFF000000) >> 24));
                binary.WriteByte((byte)((palette[i] & 0x000000FF) >> 0));
                binary.WriteByte((byte)((palette[i] & 0x0000FF00) >> 8));
                binary.WriteByte((byte)((palette[i] & 0x00FF0000) >> 16));
            }
        }