/** @return font color index */ public short getFontColorIndex() { if (_font.sizeOfColorArray() == 0) return -1; int idx = 0; CTColor color = _font.getColorArray(0); if (color.isSetIndexed()) idx = (int) color.getIndexed(); return (short) idx; }
/** Standard Red Green Blue ctColor value (RGB) with applied tint. Alpha values are ignored. */ public byte[] getRgbWithTint() { byte[] rgb = ctColor.getRgb(); if (rgb != null) { if (rgb.length == 4) { byte[] tmp = new byte[3]; System.arraycopy(rgb, 1, tmp, 0, 3); rgb = tmp; } for (int i = 0; i < rgb.length; i++) { rgb[i] = applyTint(rgb[i] & 0xFF, ctColor.getTint()); } } return rgb; }
/** * Specifies the tint value applied to the ctColor. * * <p>If tint is supplied, then it is applied to the RGB value of the ctColor to determine the * final ctColor applied. * * <p>The tint value is stored as a double from -1.0 .. 1.0, where -1.0 means 100% darken and 1.0 * means 100% lighten. Also, 0.0 means no change. * * <p>In loading the RGB value, it is converted to HLS where HLS values are (0..HLSMAX), where * HLSMAX is currently 255. Here are some examples of how to apply tint to ctColor: * * <blockquote> * * <pre> * If (tint < 0) * Lum' = Lum * (1.0 + tint) * * For example: Lum = 200; tint = -0.5; Darken 50% * Lum' = 200 * (0.5) => 100 * For example: Lum = 200; tint = -1.0; Darken 100% (make black) * Lum' = 200 * (1.0-1.0) => 0 * If (tint > 0) * Lum' = Lum * (1.0-tint) + (HLSMAX - HLSMAX * (1.0-tint)) * For example: Lum = 100; tint = 0.75; Lighten 75% * * Lum' = 100 * (1-.75) + (HLSMAX - HLSMAX*(1-.75)) * = 100 * .25 + (255 - 255 * .25) * = 25 + (255 - 63) = 25 + 192 = 217 * For example: Lum = 100; tint = 1.0; Lighten 100% (make white) * Lum' = 100 * (1-1) + (HLSMAX - HLSMAX*(1-1)) * = 100 * 0 + (255 - 255 * 0) * = 0 + (255 - 0) = 255 * </pre> * * </blockquote> * * @return the tint value */ public double getTint() { // 20101211, [email protected]: Java's double precision is less than Excel's // e.g. value of 0.59999389629810485, 17 digits as stored in style.xml, Java interpret it // as 0.5999938962981048, 16 digits, the last digit is missing. This could cause 1 // difference in RGB color. return ctColor.getTint(); }
private byte[] getRGBOrARGB() { byte[] rgb = null; if (ctColor.isSetIndexed() && ctColor.getIndexed() > 0) { HSSFColor indexed = HSSFColor.getIndexHash().get((int) ctColor.getIndexed()); if (indexed != null) { rgb = new byte[3]; rgb[0] = (byte) indexed.getTriplet()[0]; rgb[1] = (byte) indexed.getTriplet()[1]; rgb[2] = (byte) indexed.getTriplet()[2]; return rgb; } } if (!ctColor.isSetRgb()) { // No colour is available, sorry return null; } // Grab the colour rgb = ctColor.getRgb(); if (rgb.length == 4) { // Good to go, return it as-is return rgb; } // For RGB colours, but not ARGB (we think...) // Excel gets black and white the wrong way around, so switch them // 20110321, [email protected]: Theme 0 and 1 shall switch, Theme 2 and 3 shall switch. It is // not correct to change here! // if (rgb[0] == 0 && rgb[1] == 0 && rgb[2] == 0) { // rgb = new byte[] {-1, -1, -1}; // } // else if (rgb[0] == -1 && rgb[1] == -1 && rgb[2] == -1) { // rgb = new byte[] {0, 0, 0}; // } return rgb; }
/** * Indexed ctColor value. Only used for backwards compatibility. References a ctColor in * indexedColors. */ public void setIndexed(int indexed) { ctColor.setIndexed(indexed); }
/** * Indexed ctColor value. Only used for backwards compatibility. References a ctColor in * indexedColors. */ public short getIndexed() { return (short) ctColor.getIndexed(); }
/** A boolean value indicating the ctColor is automatic and system ctColor dependent. */ public void setAuto(boolean auto) { ctColor.setAuto(auto); }
/** A boolean value indicating the ctColor is automatic and system ctColor dependent. */ public boolean isAuto() { return ctColor.getAuto(); }
public XSSFColor(byte[] rgb) { this(); ctColor.setRgb(rgb); }
public XSSFColor(java.awt.Color clr) { this(); ctColor.setRgb(new byte[] {(byte) clr.getRed(), (byte) clr.getGreen(), (byte) clr.getBlue()}); }
public boolean equals(Object o) { if (o == null || !(o instanceof XSSFColor)) return false; XSSFColor cf = (XSSFColor) o; return ctColor.toString().equals(cf.getCTColor().toString()); }
public int hashCode() { return ctColor.toString().hashCode(); }
/** * Specifies the tint value applied to the ctColor. * * <p>If tint is supplied, then it is applied to the RGB value of the ctColor to determine the * final ctColor applied. * * <p>The tint value is stored as a double from -1.0 .. 1.0, where -1.0 means 100% darken and 1.0 * means 100% lighten. Also, 0.0 means no change. * * <p>In loading the RGB value, it is converted to HLS where HLS values are (0..HLSMAX), where * HLSMAX is currently 255. Here are some examples of how to apply tint to ctColor: * * <blockquote> * * <pre> * If (tint < 0) * Lum' = Lum * (1.0 + tint) * * For example: Lum = 200; tint = -0.5; Darken 50% * Lum' = 200 * (0.5) => 100 * For example: Lum = 200; tint = -1.0; Darken 100% (make black) * Lum' = 200 * (1.0-1.0) => 0 * If (tint > 0) * Lum' = Lum * (1.0-tint) + (HLSMAX - HLSMAX * (1.0-tint)) * For example: Lum = 100; tint = 0.75; Lighten 75% * * Lum' = 100 * (1-.75) + (HLSMAX - HLSMAX*(1-.75)) * = 100 * .25 + (255 - 255 * .25) * = 25 + (255 - 63) = 25 + 192 = 217 * For example: Lum = 100; tint = 1.0; Lighten 100% (make white) * Lum' = 100 * (1-1) + (HLSMAX - HLSMAX*(1-1)) * = 100 * 0 + (255 - 255 * 0) * = 0 + (255 - 0) = 255 * </pre> * * </blockquote> * * @param tint the tint value */ public void setTint(double tint) { ctColor.setTint(tint); }
/** * Index into the <clrScheme> collection, referencing a particular <sysClr> or <srgbClr> value * expressed in the Theme part. */ public void setTheme(int theme) { ctColor.setTheme(theme); }
/** * Index into the <clrScheme> collection, referencing a particular <sysClr> or <srgbClr> value * expressed in the Theme part. */ public int getTheme() { return (int) ctColor.getTheme(); }
/** Standard Alpha Red Green Blue ctColor value (ARGB). */ public void setRgb(byte[] rgb) { ctColor.setRgb(rgb); }