public CompositeContext createContext(final ColorModel srcColorModel, final ColorModel dstColorModel, RenderingHints hints) { { if (!srcColorModel.getColorSpace().isCS_sRGB() || !dstColorModel.getColorSpace().isCS_sRGB()) { throw new IllegalArgumentException("Only sRGB supported"); } } return new CompositeContext() { public void dispose() { } public void compose(Raster src, Raster dstIn, WritableRaster dstOut) { int width = min(src.getWidth(), dstIn.getWidth()); // We always work in RGB, using DataBuffer.TYPE_INT transfer type. int[] srcData = null; int[] dstData = null; int[] resData = new int[width - src.getMinX()]; for (int y = src.getMinY(); y < src.getHeight(); y++) { srcData = (int[]) src.getDataElements(src.getMinX(), y, width, 1, srcData); dstData = (int[]) dstIn.getDataElements(src.getMinX(), y, width, 1, dstData); for (int x = src.getMinX(); x < width; x++) { // TODO: Decide how to handle alpha (if at all) resData[x] = 0xff000000 | ((~srcData[x] ^ dstData[x])) & 0xffffff; } dstOut.setDataElements(src.getMinX(), y, width, 1, resData); } } }; } }
private static PDColorSpace getColorSpaceFromAWT(BufferedImage awtImage) { if (awtImage.getColorModel().getNumComponents() == 1) { // 256 color (gray) JPEG return PDDeviceGray.INSTANCE; } ColorSpace awtColorSpace = awtImage.getColorModel().getColorSpace(); if (awtColorSpace instanceof ICC_ColorSpace && !awtColorSpace.isCS_sRGB()) { throw new UnsupportedOperationException("ICC color spaces not implemented"); } switch (awtColorSpace.getType()) { case ColorSpace.TYPE_RGB: return PDDeviceRGB.INSTANCE; case ColorSpace.TYPE_GRAY: return PDDeviceGray.INSTANCE; case ColorSpace.TYPE_CMYK: return PDDeviceCMYK.INSTANCE; default: throw new UnsupportedOperationException("color space not implemented: " + awtColorSpace.getType()); } }
System.err.println("Converting from " + intendedCS + " to " + (image.getColorModel().getColorSpace().isCS_sRGB() ? "sRGB" : image.getColorModel().getColorSpace()));
if (colorSpace instanceof ICC_ColorSpace && !colorSpace.isCS_sRGB()) { entries.put(TIFF.TAG_ICC_PROFILE, new TIFFEntry(TIFF.TAG_ICC_PROFILE, ((ICC_ColorSpace) colorSpace).getProfile().getData()));
/** * Returns <code>true</code> if the given <code>ColorSpace</code> object * is an instance of <code>ICC_ColorSpace</code> but is not one of the * standard <code>ColorSpace</code>s returned by * <code>ColorSpace.getInstance()</code>. * * @param cs The <code>ColorSpace</code> to test. */ public static boolean isNonStandardICCColorSpace(ColorSpace cs) { boolean retval = false; try { // Check the standard ColorSpaces in decreasing order of // likelihood except check CS_PYCC last as in some JREs // PYCC.pf used not to be installed. retval = (cs instanceof ICC_ColorSpace) && !(cs.isCS_sRGB() || cs.equals(ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB)) || cs.equals(ColorSpace.getInstance(ColorSpace.CS_GRAY)) || cs.equals(ColorSpace.getInstance(ColorSpace.CS_CIEXYZ)) || cs.equals(ColorSpace.getInstance(ColorSpace.CS_PYCC))); } catch(IllegalArgumentException e) { // PYCC.pf not installed: ignore it - 'retval' is still 'false'. } return retval; }
/** * Returns <code>true</code> if the given <code>ColorSpace</code> object * is an instance of <code>ICC_ColorSpace</code> but is not one of the * standard <code>ColorSpace</code>s returned by * <code>ColorSpace.getInstance()</code>. * * @param cs The <code>ColorSpace</code> to test. */ public static boolean isNonStandardICCColorSpace(ColorSpace cs) { boolean retval = false; try { // Check the standard ColorSpaces in decreasing order of // likelihood except check CS_PYCC last as in some JREs // PYCC.pf used not to be installed. retval = (cs instanceof ICC_ColorSpace) && !(cs.isCS_sRGB() || cs.equals(ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB)) || cs.equals(ColorSpace.getInstance(ColorSpace.CS_GRAY)) || cs.equals(ColorSpace.getInstance(ColorSpace.CS_CIEXYZ)) || cs.equals(ColorSpace.getInstance(ColorSpace.CS_PYCC))); } catch(IllegalArgumentException e) { // PYCC.pf not installed: ignore it - 'retval' is still 'false'. } return retval; }
public void validateRGBColorSpace() throws ImageValidationException { if (!image.getColorModel().getColorSpace().isCS_sRGB()) { throw new ImageValidationException(String.format( "%s image must be RGB", imageType)); } }
private static Color getsRGBColor(Color c) { // Color space must be consistent, so convert to sRGB if necessary // TODO really? return c.getColorSpace().isCS_sRGB() ? c : ColorUtil.toSRGBColor(c); }
public static void processImage( BufferedImage source ) { ColorSpace colorSpace = source.getColorModel().getColorSpace(); if ( dumpColorSpaceProperties ) { System.out.printf( "color space type: %d, is RGB = %s%n", colorSpace.getType(), colorSpace.isCS_sRGB() ); for ( int i = 0; i < colorSpace.getNumComponents(); i++ ) { System.out.printf( "component %d = %s%n", i, colorSpace.getName( i ) ); } } if ( colorSpace.getType() == ColorSpace.TYPE_RGB ) { // guaranteed RGB(A) order, proceed with raster.getPixels() } else { // well, find a way to convert from that space into RGB throw new AssertionError( "color space type = " + colorSpace.getType() ); } }
private static PDColorSpace getColorSpaceFromAWT(BufferedImage awtImage) { if (awtImage.getColorModel().getNumComponents() == 1) { // 256 color (gray) JPEG return PDDeviceGray.INSTANCE; } ColorSpace awtColorSpace = awtImage.getColorModel().getColorSpace(); if (awtColorSpace instanceof ICC_ColorSpace && !awtColorSpace.isCS_sRGB()) { throw new UnsupportedOperationException("ICC color spaces not implemented"); } switch (awtColorSpace.getType()) { case ColorSpace.TYPE_RGB: return PDDeviceRGB.INSTANCE; case ColorSpace.TYPE_GRAY: return PDDeviceGray.INSTANCE; case ColorSpace.TYPE_CMYK: return PDDeviceCMYK.INSTANCE; default: throw new UnsupportedOperationException("color space not implemented: " + awtColorSpace.getType()); } }
public static double getGamma(GraphicsDevice screen) { ColorSpace cs = screen.getDefaultConfiguration().getColorModel().getColorSpace(); if (cs.isCS_sRGB()) { return 2.2; } else { try { return ((ICC_ProfileRGB)((ICC_ColorSpace)cs).getProfile()).getGamma(0); } catch (RuntimeException e) { } } return 0.0; } public static GraphicsDevice getScreenDevice(int screenNumber) throws Exception {
public float[] getColorComponents(ColorSpace cspace, float[] compArray) { if (cspace.isCS_sRGB()) { ColorSpace oca = new OCAColorSpace(); return oca.toRGB(new float[]{getOCA()}); } return null; }
private void establishFallbackRGB(StringBuffer codeBuffer, Color color) { float[] comps; if (color.getColorSpace().isCS_sRGB()) { comps = color.getColorComponents(null); } else { if (log.isDebugEnabled()) { log.debug("Converting color to sRGB as a fallback: " + color); } ColorSpace sRGB = ColorSpace.getInstance(ColorSpace.CS_sRGB); comps = color.getColorComponents(sRGB, null); } assert comps.length == 3; boolean gray = ColorUtil.isGray(color); if (gray) { comps = new float[] {comps[0]}; } writeSetColor(codeBuffer, comps, gray ? "setgray" : "setrgbcolor"); }
private void establishDeviceRGB(StringBuffer codeBuffer, Color color, boolean fill) { float[] comps; if (color.getColorSpace().isCS_sRGB()) { comps = color.getColorComponents(null); } else { if (log.isDebugEnabled()) { log.debug("Converting color to sRGB as a fallback: " + color); } ColorSpace sRGB = ColorSpace.getInstance(ColorSpace.CS_sRGB); comps = color.getColorComponents(sRGB, null); } if (ColorUtil.isGray(color)) { comps = new float[] {comps[0]}; //assuming that all components are the same writeColor(codeBuffer, comps, 1, (fill ? "g" : "G")); } else { writeColor(codeBuffer, comps, 3, (fill ? "rg" : "RG")); } }
private static Color getsRGBFallback(ColorWithAlternatives color) { Color fallbackColor; if (color instanceof ColorWithFallback) { fallbackColor = ((ColorWithFallback)color).getFallbackColor(); if (!fallbackColor.getColorSpace().isCS_sRGB()) { fallbackColor = toSRGBColor(fallbackColor); } } else { fallbackColor = toSRGBColor(color); } return fallbackColor; }
/** * Converts an arbitrary {@link Color} to a plain sRGB color doing the conversion at the * best possible conversion quality. * @param col the original color * @return the sRGB equivalent */ public static Color toSRGBColor(Color col) { if (col.getColorSpace().isCS_sRGB()) { return col; //Don't convert if already sRGB to avoid conversion differences } float[] comps = col.getColorComponents(null); float[] srgb = col.getColorSpace().toRGB(comps); comps = col.getComponents(null); float alpha = comps[comps.length - 1]; return new Color(srgb[0], srgb[1], srgb[2], alpha); }
public ColorSpaceNode(ColorSpace colorSpace) { super("ColorSpace", colorSpace); addClass(); int numComponents = colorSpace.getNumComponents(); addInt("numComponents", numComponents); int type = colorSpace.getType(); addString("type", getColorSpaceTypeDescription(type)); boolean is_sRGB = colorSpace.isCS_sRGB(); addBoolean("is_sRGB", is_sRGB); }