FileDocCategorySizeDatePackage
ICC_Transform.javaAPI DocAndroid 1.5 API4961Wed May 06 22:41:54 BST 2009org.apache.harmony.awt.gl.color

ICC_Transform

public 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

param
profiles - list of ICC profiles
param
renderIntents - only hints for CMM

        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

param
profiles - list of ICC profiles

        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 voidfinalize()

        if (transformHandle != 0) {
            NativeCMM.cmmDeleteTransform(transformHandle);
        }
    
public java.awt.color.ICC_ProfilegetDst()

return
Returns the dst.

        return dst;
    
public intgetNumInputChannels()

return
Returns the number of input channels.

        return numInputChannels;
    
public intgetNumOutputChannels()

return
Returns the number of output channels.

        return numOutputChannels;
    
public java.awt.color.ICC_ProfilegetSrc()

return
Returns the src.

        return src;
    
public voidtranslateColors(NativeImageFormat src, NativeImageFormat dst)
Invokes native color conversion

param
src - source image format
param
dst - destination image format

        NativeCMM.cmmTranslateColors(transformHandle, src, dst);