/// <summary> /// Initializes a new instance of the <see cref="OctreeNode"/> class. /// </summary> public OctreeNode(Int32 level, OctreeQuantizer parent) { nodes = new OctreeNode[8]; if (level < 7) { parent.AddLevelNode(level, this); } }
/// <summary> /// Removes the leaves by summing all it's color components and pixel presence. /// </summary> /// <returns></returns> public Int32 RemoveLeaves(Int32 level, Int32 activeColorCount, Int32 targetColorCount, OctreeQuantizer parent) { Int32 result = 0; // scans thru all the active nodes for (Int32 index = 0; index < 8; index++) { OctreeNode node = nodes[index]; if (node != null) { // sums up their color components red += node.red; green += node.green; blue += node.blue; // and pixel presence pixelCount += node.pixelCount; // increases the count of reduced nodes result++; } } // returns a number of reduced sub-nodes, minus one because this node becomes a leaf return(result - 1); }