net.sourceforge.jiu.color.quantization

Class OctreeNode

Implemented Interfaces:
ComparatorInterface, RGBIndex

public class OctreeNode
extends java.lang.Object
implements ComparatorInterface, RGBIndex

A single node in an octree.
Author:
Marco Schmidt
Since:
0.6.0
See Also:
OctreeColorQuantizer

Field Summary

private int
blue
private int
blueSum
private OctreeNode[]
children
private int
green
private int
greenSum
private int
paletteIndex
private int
pixelCount
private int
red
private int
redSum

Fields inherited from interface net.sourceforge.jiu.data.RGBIndex

INDEX_BLUE, INDEX_GREEN, INDEX_RED

Method Summary

static boolean
add(OctreeNode root, int red, int green, int blue, int bitsPerSample)
Add a color red-green-blue to the octree, given by its root node.
int
compare(Object o1, Object o2)
Compares the two argument objects and returns their relation.
private static int
computeIndex(int red, int green, int blue, int shift)
void
copyChildSums()
Adds the sums for red, green and blue values and the pixel count values of all child nodes and stores the results in this node.
void
determineRepresentativeColor()
int
getBlue()
OctreeNode[]
getChildren()
int
getGreen()
int
getNumChildren()
int
getPaletteIndex()
int
getRed()
boolean
isLeaf()
private int
map(int r, int g, int b, int shift, int[] quantizedRgb)
int
map(int[] origRgb, int[] quantizedRgb)
Returns the index of the best match for origRgb in the palette or -1 if the best match could not be determined.
void
setChildren(OctreeNode[] newChildren)
void
setPaletteIndex(int index)
private void
update(int red, int green, int blue)

Field Details

blue

private int blue

blueSum

private int blueSum

children

private OctreeNode[] children

green

private int green

greenSum

private int greenSum

paletteIndex

private int paletteIndex

pixelCount

private int pixelCount

red

private int red

redSum

private int redSum

Method Details

add

public static boolean add(OctreeNode root,
                          int red,
                          int green,
                          int blue,
                          int bitsPerSample)
Add a color red-green-blue to the octree, given by its root node. This methods follows the octree down to the bitsPerSample'th level, creating nodes as necessary. Increases the pixelCount of a leaf node (if the node already exists) or initializes a newly-created leaf.
Parameters:
root - root node of the octree
red - the red intensity value of the color to be added
green - the green intensity value of the color to be added
blue - the blue intensity value of the color to be added
bitsPerSample -

compare

public int compare(Object o1,
                   Object o2)
Compares the two argument objects and returns their relation. Returns
  • a value < 0 if o1 is smaller than o2,
  • 0 if o1 is equal to o2 and
  • a value > 0 if o1 is greater than o2.
Specified by:
compare in interface ComparatorInterface

computeIndex

private static int computeIndex(int red,
                                int green,
                                int blue,
                                int shift)

copyChildSums

public void copyChildSums()
Adds the sums for red, green and blue values and the pixel count values of all child nodes and stores the results in this node. Does nothing if this is a leaf. Otherwise, recursively calls itself with all non-null child nodes and adds their sums for red, green and blue and the number of pixel values. Then stores these values in this node. They will be used when the octree is pruned to have a certain number of leaves.

determineRepresentativeColor

public void determineRepresentativeColor()

getBlue

public int getBlue()

getChildren

public OctreeNode[] getChildren()

getGreen

public int getGreen()

getNumChildren

public int getNumChildren()

getPaletteIndex

public int getPaletteIndex()

getRed

public int getRed()

isLeaf

public boolean isLeaf()

map

private final int map(int r,
                      int g,
                      int b,
                      int shift,
                      int[] quantizedRgb)

map

public int map(int[] origRgb,
               int[] quantizedRgb)
Returns the index of the best match for origRgb in the palette or -1 if the best match could not be determined. If there was a best match, quantizedRgb is filled with the quantized color's RGB values.

setChildren

public void setChildren(OctreeNode[] newChildren)

setPaletteIndex

public void setPaletteIndex(int index)

update

private void update(int red,
                    int green,
                    int blue)