public OctreeNode(int level, OctreeQuantizer parent) { nodes = new OctreeNode[8]; if (level < 7) { parent.AddLevelNode(level, this); } }
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; }
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); } }