示例#1
0
        public OctreeNode(int level, OctreeQuantizer parent)
        {
            nodes = new OctreeNode[8];

            if (level < 7)
            {
                parent.AddLevelNode(level, this);
            }
        }
示例#2
0
        private void octreeColorQuantizationToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (original == null)
            {
                return;
            }

            Octree octree = new Octree();

            octree.ShowDialog();
            OctreeQuantizer quantizer = new OctreeQuantizer();

            for (int j = 0; j < original.Height; j++)
            {
                for (int i = 0; i < original.Width; i++)
                {
                    Color c = original.GetPixel(i, j);
                    quantizer.AddColor(c);
                }
            }

            int availableColors = octree.availableColors;

            List <Color> limitedPalette = new List <Color>();

            limitedPalette = quantizer.GetPalette(availableColors);

            modified = new Bitmap(original.Width, original.Height);
            for (int j = 0; j < original.Height; j++)
            {
                for (int i = 0; i < original.Width; i++)
                {
                    modified.SetPixel(i, j, limitedPalette[quantizer.GetPaletteIndex(original.GetPixel(i, j))]);
                }
            }

            filteredPictureBox.Image = modified;
        }
示例#3
0
        public void AddColor(Color color, int level, OctreeQuantizer parent)
        {
            // if this node is a leaf, then increase a color amount, and pixel presence
            if (level == 8)
            {
                red   += color.R;
                green += color.G;
                blue  += color.B;
                pixelCount++;
            }
            else if (level < 8) // otherwise goes one level deeper
            {
                // calculates an index for the next sub-branch
                int index = GetColorIndexAtLevel(color, level);


                if (nodes[index] == null)
                {
                    nodes[index] = new OctreeNode(level, parent);
                }

                nodes[index].AddColor(color, level + 1, parent);
            }
        }