1 /* 2 * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package sun.java2d.cmm.lcms; 27 28 import java.awt.color.ColorSpace; 29 import java.awt.color.ICC_Profile; 30 import java.awt.color.CMMException; 31 import sun.java2d.cmm.ColorTransform; 32 import sun.java2d.cmm.PCMM; 33 import sun.java2d.cmm.lcms.LCMS; 34 import sun.java2d.cmm.lcms.LCMSTransform; 35 36 public class LCMS implements PCMM { 37 38 /* methods invoked from ICC_Profile */ 39 public native long loadProfile(byte[] data); 40 41 public native void freeProfile(long profileID); 42 43 public native synchronized int getProfileSize(long profileID); 44 45 public native synchronized void getProfileData(long profileID, byte[] data); 46 47 public native synchronized int getTagSize(long profileID, int tagSignature); 48 public native synchronized void getTagData(long profileID, int tagSignature, 49 byte[] data); 50 public native synchronized void setTagData(long profileID, int tagSignature, 51 byte[] data); 52 53 public static native long getProfileID(ICC_Profile profile); 54 55 public static native long createNativeTransform( 56 long[] profileIDs, int renderType, int inFormatter, int outFormatter, 57 Object disposerRef); 58 59 /** 60 * Constructs ColorTransform object corresponding to an ICC_profile 61 */ 62 public ColorTransform createTransform(ICC_Profile profile, 63 int renderType, 64 int transformType) 65 { 66 return new LCMSTransform(profile, renderType, renderType); 67 } 68 69 /** 70 * Constructs an ColorTransform object from a list of ColorTransform 71 * objects 72 */ 73 public synchronized ColorTransform createTransform( 74 ColorTransform[] transforms) 75 { 76 return new LCMSTransform(transforms); 77 } 78 79 /* methods invoked from LCMSTransform */ 80 public static native void colorConvert(LCMSTransform trans, 81 LCMSImageLayout src, 82 LCMSImageLayout dest); 83 public static native void freeTransform(long ID); 84 85 public static native void initLCMS(Class Trans, Class IL, Class Pf); 86 87 /* the class initializer which loads the CMM */ 88 static { 89 java.security.AccessController.doPrivileged( 90 new java.security.PrivilegedAction() { 91 public Object run() { 92 /* We need to load awt here because of usage trace and 93 * disposer frameworks 94 */ 95 System.loadLibrary("awt"); 96 System.loadLibrary("lcms"); 97 return null; 98 } 99 } 100 ); 101 102 initLCMS(LCMSTransform.class, LCMSImageLayout.class, ICC_Profile.class); 103 } 104 }