ICC_Transformpublic class ICC_Transform extends Object This class encapsulates native ICC transform object, is responsible for its
creation, destruction and passing its handle to the native CMM. |
Fields Summary |
---|
private long | transformHandle | private int | numInputChannels | private int | numOutputChannels | private ICC_Profile | src | private ICC_Profile | dst |
Constructors Summary |
---|
public ICC_Transform(ICC_Profile[] profiles, int[] renderIntents)Constructs a multiprofile ICC transform
int numProfiles = profiles.length;
long[] profileHandles = new long[numProfiles];
for (int i=0; i<numProfiles; i++) {
profileHandles[i] = NativeCMM.getHandle(profiles[i]);
}
transformHandle = NativeCMM.cmmCreateMultiprofileTransform(
profileHandles,
renderIntents);
src = profiles[0];
dst = profiles[numProfiles-1];
numInputChannels = src.getNumComponents();
numOutputChannels = dst.getNumComponents();
| public ICC_Transform(ICC_Profile[] profiles)This constructor is able to set intents by default
int numProfiles = profiles.length;
int[] renderingIntents = new int[numProfiles];
// Default is perceptual
int currRenderingIntent = ICC_Profile.icPerceptual;
// render as colorimetric for output device
if (profiles[0].getProfileClass() == ICC_Profile.CLASS_OUTPUT) {
currRenderingIntent = ICC_Profile.icRelativeColorimetric;
}
// get the transforms from each profile
for (int i = 0; i < numProfiles; i++) {
// first or last profile cannot be abstract
// if profile is abstract, the only possible way is
// use AToB0Tag (perceptual), see ICC spec
if (i != 0 &&
i != numProfiles - 1 &&
profiles[i].getProfileClass() == ICC_Profile.CLASS_ABSTRACT
) {
currRenderingIntent = ICC_Profile.icPerceptual;
}
renderingIntents[i] = currRenderingIntent;
// use current rendering intent
// to select LUT from the next profile (chaining)
currRenderingIntent =
ICC_ProfileHelper.getRenderingIntent(profiles[i]);
}
// Get the profile handles and go ahead
long[] profileHandles = new long[numProfiles];
for (int i=0; i<numProfiles; i++) {
profileHandles[i] = NativeCMM.getHandle(profiles[i]);
}
transformHandle = NativeCMM.cmmCreateMultiprofileTransform(
profileHandles,
renderingIntents);
src = profiles[0];
dst = profiles[numProfiles-1];
numInputChannels = src.getNumComponents();
numOutputChannels = dst.getNumComponents();
|
Methods Summary |
---|
protected void | finalize()
if (transformHandle != 0) {
NativeCMM.cmmDeleteTransform(transformHandle);
}
| public java.awt.color.ICC_Profile | getDst()
return dst;
| public int | getNumInputChannels()
return numInputChannels;
| public int | getNumOutputChannels()
return numOutputChannels;
| public java.awt.color.ICC_Profile | getSrc()
return src;
| public void | translateColors(NativeImageFormat src, NativeImageFormat dst)Invokes native color conversion
NativeCMM.cmmTranslateColors(transformHandle, src, dst);
|
|