1 18 package org.apache.batik.ext.awt.color; 19 20 import java.awt.color.ColorSpace ; 21 import java.awt.color.ICC_ColorSpace ; 22 import java.awt.color.ICC_Profile ; 23 24 33 public class ICCColorSpaceExt extends ICC_ColorSpace { 34 public static final int PERCEPTUAL = 0; 35 public static final int RELATIVE_COLORIMETRIC = 1; 36 public static final int ABSOLUTE_COLORIMETRIC = 2; 37 public static final int SATURATION = 3; 38 public static final int AUTO = 4; 39 40 static final ColorSpace sRGB = ColorSpace.getInstance(ColorSpace.CS_sRGB); 41 int intent; 42 43 public ICCColorSpaceExt(ICC_Profile p, int intent){ 44 super(p); 45 46 this.intent = intent; 47 switch(intent){ 48 case AUTO: 49 case RELATIVE_COLORIMETRIC: 50 case ABSOLUTE_COLORIMETRIC: 51 case SATURATION: 52 case PERCEPTUAL: 53 break; 54 default: 55 throw new IllegalArgumentException (); 56 } 57 58 61 if(intent != AUTO){ 62 byte[] hdr = p.getData(ICC_Profile.icSigHead); 63 hdr[ICC_Profile.icHdrRenderingIntent] = (byte)intent; 64 } 65 } 66 67 72 public float[] intendedToRGB(float[] values){ 73 switch(intent){ 74 case ABSOLUTE_COLORIMETRIC: 75 return absoluteColorimetricToRGB(values); 76 case PERCEPTUAL: 77 case AUTO: 78 return perceptualToRGB(values); 79 case RELATIVE_COLORIMETRIC: 80 return relativeColorimetricToRGB(values); 81 case SATURATION: 82 return saturationToRGB(values); 83 default: 84 throw new Error (); 85 } 86 } 87 88 92 public float[] perceptualToRGB(float[] values){ 93 return toRGB(values); 94 } 95 96 100 public float[] relativeColorimetricToRGB(float[] values){ 101 float[] ciexyz = toCIEXYZ(values); 102 return sRGB.fromCIEXYZ(ciexyz); 103 } 104 105 109 public float[] absoluteColorimetricToRGB(float[] values){ 110 return perceptualToRGB(values); 111 } 112 113 117 public float[] saturationToRGB(float[] values){ 118 return perceptualToRGB(values); 119 } 120 } 121 | Popular Tags |