FileDocCategorySizeDatePackage
HSSFPalette.javaAPI DocApache Poi 3.0.17120Mon Jan 01 12:39:36 GMT 2007org.apache.poi.hssf.usermodel

HSSFPalette

public class HSSFPalette extends Object
Represents a workbook color palette. Internally, the XLS format refers to colors using an offset into the palette record. Thus, the first color in the palette has the index 0x8, the second has the index 0x9, etc. through 0x40
author
Brian Sanders (bsanders at risklabs dot com)

Fields Summary
private PaletteRecord
palette
Constructors Summary
protected HSSFPalette(PaletteRecord palette)

        this.palette = palette;
    
Methods Summary
public org.apache.poi.hssf.util.HSSFColoraddColor(byte red, byte green, byte blue)
Adds a new color into an empty color slot.

param
red The red component
param
green The green component
param
blue The blue component
return
The new custom color.
throws
RuntimeException if there are more more free color indexes.

        byte[] b = palette.getColor(PaletteRecord.FIRST_COLOR_INDEX);
        short i;
        for (i = (short) PaletteRecord.FIRST_COLOR_INDEX; i < PaletteRecord.STANDARD_PALETTE_SIZE + PaletteRecord.FIRST_COLOR_INDEX; b = palette.getColor(++i))
        {
            if (b == null)
            {
                setColorAtIndex( i, red, green, blue );
                return getColor(i);
            }
        }
        throw new RuntimeException("Could not find free color index");
    
public org.apache.poi.hssf.util.HSSFColorfindColor(byte red, byte green, byte blue)
Finds the first occurance of a given color

param
red the RGB red component, between 0 and 255 inclusive
param
green the RGB green component, between 0 and 255 inclusive
param
blue the RGB blue component, between 0 and 255 inclusive
return
the color, or null if the color does not exist in this palette

        byte[] b = palette.getColor(PaletteRecord.FIRST_COLOR_INDEX);
        for (short i = (short) PaletteRecord.FIRST_COLOR_INDEX; b != null;
            b = palette.getColor(++i))
        {
            if (b[0] == red && b[1] == green && b[2] == blue)
            {
                return new CustomColor(i, b);
            }
        }
        return null;
    
public org.apache.poi.hssf.util.HSSFColorfindSimilarColor(byte red, byte green, byte blue)
Finds the closest matching color in the custom palette. The method for finding the distance between the colors is fairly primative.

param
red The red component of the color to match.
param
green The green component of the color to match.
param
blue The blue component of the color to match.
return
The closest color or null if there are no custom colors currently defined.

        HSSFColor result = null;
        int minColorDistance = Integer.MAX_VALUE;
        byte[] b = palette.getColor(PaletteRecord.FIRST_COLOR_INDEX);
        for (short i = (short) PaletteRecord.FIRST_COLOR_INDEX; b != null;
            b = palette.getColor(++i))
        {
            int colorDistance = red - b[0] + green - b[1] + blue - b[2];
            if (colorDistance < minColorDistance)
            {
                result = getColor(i);
            }
        }
        return result;
    
public org.apache.poi.hssf.util.HSSFColorgetColor(short index)
Retrieves the color at a given index

param
index the palette index, between 0x8 to 0x40 inclusive
return
the color, or null if the index is not populated

    	//Handle the special AUTOMATIC case
    	if (index == HSSFColor.AUTOMATIC.index)
    		return HSSFColor.AUTOMATIC.getInstance();
    	else {
          byte[] b = palette.getColor(index);
          if (b != null)
          {
             return new CustomColor(index, b);
          }
    	}
        return null;
    
public voidsetColorAtIndex(short index, byte red, byte green, byte blue)
Sets the color at the given offset

param
index the palette index, between 0x8 to 0x40 inclusive
param
red the RGB red component, between 0 and 255 inclusive
param
green the RGB green component, between 0 and 255 inclusive
param
blue the RGB blue component, between 0 and 255 inclusive

        palette.setColor(index, red, green, blue);