Пример #1
0
        static public byte[] OctreeQuantization(byte[] buffer)
        {
            byte[] result = new byte[buffer.Length];

            OctreeQuantizer octree = new OctreeQuantizer();

            for (int i = 0; i < buffer.Length; i += 4)
            {
                octree.AddColor(Color.FromArgb(buffer[i + 2], buffer[i + 1], buffer[i]));
            }

            var limitedPalette = octree.GetPalette(Constants.filterOctreeColorLimit);

            for (int i = 0; i < buffer.Length; i += 4)
            {
                Color currentPixel = Color.FromArgb(buffer[i + 2], buffer[i + 1], buffer[i]);
                Color resultPixel  = limitedPalette[octree.GetPaletteIndex(currentPixel)];

                result[i + 0] = resultPixel.B;
                result[i + 1] = resultPixel.G;
                result[i + 2] = resultPixel.R;
                result[i + 3] = 255;
            }

            return(result);
        }
Пример #2
0
        public OctreeNode(int level, OctreeQuantizer parent) //level - level of parent
        {
            nodes = new OctreeNode[8];

            if (level < 7)
            {
                parent.AddLevelNode(level, this);
            }
        }