Use the GNU ColorSpace converter

This commit is contained in:
smallsql 2010-11-08 10:03:31 +00:00
Родитель a96ed5bbe1
Коммит acb82241c9
3 изменённых файлов: 112 добавлений и 58 удалений

Просмотреть файл

@ -44,6 +44,7 @@ ikvm/internal/IntrinsicThreadLocal.java
ikvm/internal/JNI.java
ikvm/internal/Serialization.java
ikvm/internal/Winsock.java
java/awt/color/ICC_ColorSpace.java
java/awt/Font.java
java/awt/GraphicsConfiguration.java
java/awt/Image.java
@ -110,6 +111,17 @@ java/util/zip/StreamManipulator.java
java/util/zip/ZipEntry.java
java/util/zip/ZipFile.java
gnu/java/awt/Buffers.java
gnu/java/awt/color/CieXyzConverter.java
gnu/java/awt/color/ClutProfileConverter.java
gnu/java/awt/color/ColorLookUpTable.java
gnu/java/awt/color/ColorSpaceConverter.java
gnu/java/awt/color/GrayProfileConverter.java
gnu/java/awt/color/GrayScaleConverter.java
gnu/java/awt/color/ProfileHeader.java
gnu/java/awt/color/RgbProfileConverter.java
gnu/java/awt/color/SrgbConverter.java
gnu/java/awt/color/TagEntry.java
gnu/java/awt/color/ToneReproductionCurve.java
gnu/java/util/EmptyEnumeration.java
sun/awt/AppContext.java
sun/awt/EmbeddedFrame.java
@ -7152,7 +7164,6 @@ sun/security/jgss/wrapper/SunNativeProvider.java
@OPENJDK@/jdk/src/share/classes/java/awt/Window.java
@OPENJDK@/jdk/src/share/classes/java/awt/color/CMMException.java
@OPENJDK@/jdk/src/share/classes/java/awt/color/ColorSpace.java
@OPENJDK@/jdk/src/share/classes/java/awt/color/ICC_ColorSpace.java
@OPENJDK@/jdk/src/share/classes/java/awt/color/ICC_Profile.java
@OPENJDK@/jdk/src/share/classes/java/awt/color/ICC_ProfileGray.java
@OPENJDK@/jdk/src/share/classes/java/awt/color/ICC_ProfileRGB.java

Просмотреть файл

@ -146,7 +146,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.Corba.dll
-baseaddress:0x56960000
-baseaddress:0x56A20000
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/corba/*
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/jndi/cosnaming/jndiprovider.properties
@OPENJDK@/build/linux-amd64/impsrc/com/sun/corba/se/impl/activation/*.class
@ -264,7 +264,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.XML.API.dll
-baseaddress:0x56FC0000
-baseaddress:0x570E0000
@OPENJDK@/build/linux-amd64/impsrc/javax/xml/*.class
@OPENJDK@/build/linux-amd64/impsrc/javax/xml/datatype/*.class
@OPENJDK@/build/linux-amd64/impsrc/javax/xml/namespace/*.class
@ -296,7 +296,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.XML.XPath.dll
-baseaddress:0x57080000
-baseaddress:0x571A0000
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/org/apache/xalan/internal/res/*
@OPENJDK@/build/linux-amd64/impsrc/com/sun/org/apache/xalan/internal/extensions/*.class
@OPENJDK@/build/linux-amd64/impsrc/com/sun/org/apache/xalan/internal/res/*.class
@ -321,7 +321,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.XML.Parse.dll
-baseaddress:0x573B0000
-baseaddress:0x574D0000
-resource:com/sun/org/apache/xml/internal/serialize/HTMLEntities.res=@OPENJDK@/build/linux-amd64/impsrc/com/sun/org/apache/xml/internal/serialize/HTMLEntities.res
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/org/apache/xerces/*
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/org/apache/xml/internal/serializer/*
@ -380,7 +380,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.XML.Transform.dll
-baseaddress:0x57A40000
-baseaddress:0x57BC0000
@OPENJDK@/build/linux-amd64/impsrc/com/sun/java_cup/internal/runtime/*.class
@OPENJDK@/build/linux-amd64/impsrc/com/sun/org/apache/bcel/internal/*.class
@OPENJDK@/build/linux-amd64/impsrc/com/sun/org/apache/bcel/internal/classfile/*.class
@ -404,7 +404,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.XML.Bind.dll
-baseaddress:0x57E60000
-baseaddress:0x58040000
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/javax/xml/bind/*
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/xml/internal/bind/*
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/xml/internal/fastinfoset/*
@ -462,7 +462,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.XML.WebServices.dll
-baseaddress:0x581C0000
-baseaddress:0x583D0000
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/xml/internal/messaging/*
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/xml/internal/ws/*
@OPENJDK@/build/linux-amd64/impsrc/com/sun/xml/internal/messaging/saaj/*.class
@ -555,7 +555,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.XML.Crypto.dll
-baseaddress:0x58640000
-baseaddress:0x58880000
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/org/apache/xml/internal/security/*
@OPENJDK@/jdk/src/share/classes/com/sun/org/apache/xml/internal/security/*.class
@OPENJDK@/jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/*.class
@ -591,7 +591,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.SwingAWT.dll
-baseaddress:0x58790000
-baseaddress:0x589D0000
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/META-INF/services/sun.java2d.*
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/java/swing/*
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/javax/swing/*
@ -600,8 +600,10 @@ assembly.class
-r:IKVM.AWT.WinForms.dll
ikvm/awt/*.class
java/awt/*.class
java/awt/color/*.class
java/awt/image/*.class
gnu/java/awt/*.class
gnu/java/awt/color/*.class
sun/awt/*.class
sun/awt/image/*.class
sun/awt/shell/*.class
@ -674,13 +676,13 @@ assembly.class
}
{
-out:IKVM.OpenJDK.Charsets.dll
-baseaddress:0x59810000
-baseaddress:0x59BA0000
@OPENJDK@/jdk/src/share/classes/sun/io/*.class
@OPENJDK@/jdk/src/share/classes/sun/nio/cs/ext/*.class
}
{
-out:IKVM.OpenJDK.Util.dll
-baseaddress:0x5A650000
-baseaddress:0x5AA10000
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/java/util/jar/pack/intrinsic.properties
java/util/zip/*.class
@OPENJDK@/build/linux-amd64/gensrc/sun/util/logging/resources/*.class
@ -698,7 +700,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.Text.dll
-baseaddress:0x5AA70000
-baseaddress:0x5AE60000
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/sun/text/*
java/text/*.class
@OPENJDK@/jdk/src/share/classes/java/text/*.class
@ -709,7 +711,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.Security.dll
-baseaddress:0x5AC50000
-baseaddress:0x5B040000
sun/security/jgss/wrapper/*.class
@OPENJDK@/jdk/src/share/classes/com/sun/crypto/provider/*.class
@OPENJDK@/jdk/src/share/classes/com/sun/net/ssl/*.class
@ -774,7 +776,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.Management.dll
-baseaddress:0x5B370000
-baseaddress:0x5B7C0000
com/sun/management/*.class
ConnectorBootstrap$DefaultValues.class
ConnectorBootstrap.class
@ -816,7 +818,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.Misc.dll
-baseaddress:0x5B730000
-baseaddress:0x5BBE0000
@OPENJDK@/build/linux-amd64/impsrc/javax/activity/*.class
@OPENJDK@/build/linux-amd64/impsrc/javax/annotation/*.class
@OPENJDK@/build/linux-amd64/impsrc/javax/annotation/processing/*.class
@ -906,7 +908,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.Naming.dll
-baseaddress:0x5B7F0000
-baseaddress:0x5BCA0000
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/jndi/ldap/jndiprovider.properties
sun/net/dns/*.class
@OPENJDK@/jdk/src/share/classes/com/sun/jndi/dns/*.class
@ -931,7 +933,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.Jdbc.dll
-baseaddress:0x5B940000
-baseaddress:0x5BE20000
-resource:META-INF/services/java.sql.Driver=resources/META-INF/services/java.sql.Driver
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/rowset/*
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/javax/sql/*
@ -949,7 +951,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.Remoting.dll
-baseaddress:0x5BA90000
-baseaddress:0x5BF70000
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/sun/rmi/*
@OPENJDK@/build/linux-amd64/classes/com/sun/jndi/rmi/registry/*.class
@OPENJDK@/build/linux-amd64/classes/java/rmi/activation/*.class
@ -975,7 +977,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.Beans.dll
-baseaddress:0x5BBB0000
-baseaddress:0x5C090000
@OPENJDK@/build/linux-amd64/impsrc/com/sun/activation/registries/*.class
@OPENJDK@/build/linux-amd64/impsrc/javax/activation/*.class
@OPENJDK@/jdk/src/share/classes/com/sun/beans/*.class
@ -987,7 +989,7 @@ assembly.class
}
{
-out:IKVM.OpenJDK.Media.dll
-baseaddress:0x5BC70000
-baseaddress:0x5C150000
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/META-INF/services/javax.print.*
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/META-INF/services/javax.sound.*
-recurse:@OPENJDK@/build/linux-amd64/j2re-image/lib/resources.jar/com/sun/imageio/plugins/common/iio-plugin.properties

Просмотреть файл

@ -1,5 +1,6 @@
/*
Copyright (C) 2009 Jeroen Frijters
Copyright (C) 2010 Volker Berlin (i-net software)
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@ -23,70 +24,81 @@
*/
package sun.java2d.cmm.lcms;
import gnu.java.awt.color.TagEntry;
import java.awt.color.CMMException;
import java.awt.color.ColorSpace;
import java.awt.color.ICC_Profile;
import java.awt.color.ICC_ProfileGray;
import java.awt.color.ICC_ProfileRGB;
import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.awt.image.WritableRaster;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Hashtable;
import sun.java2d.cmm.ColorTransform;
import sun.java2d.cmm.PCMM;
// dummy color management implementation
public class LCMS implements PCMM
{
private final ArrayList<byte[]> profiles = new ArrayList<byte[]>();
public class LCMS implements PCMM {
private static final int HEADER_SIZE = 128;
private final ArrayList<ProfileData> profiles = new ArrayList<ProfileData>();
public synchronized long loadProfile(byte[] data)
{
int free = profiles.indexOf(null);
if (free != -1)
{
profiles.set(free, data.clone());
public synchronized long loadProfile( byte[] data ) {
int free = profiles.indexOf( null );
if( free != -1 ) {
profiles.set( free, new ProfileData( data.clone()) );
return free;
}
else
{
} else {
long id = profiles.size();
profiles.add(data.clone());
profiles.add( new ProfileData( data.clone()) );
return id;
}
}
public synchronized void freeProfile(long profileID)
{
profiles.set((int)profileID, null);
public synchronized void freeProfile( long profileID ) {
profiles.set( (int)profileID, null );
}
public synchronized int getProfileSize(long profileID)
{
return profiles.get((int)profileID).length;
public synchronized int getProfileSize( long profileID ) {
return profiles.get( (int)profileID ).data.length;
}
public synchronized void getProfileData(long profileID, byte[] data)
{
byte[] src = profiles.get((int)profileID);
System.arraycopy(src, 0, data, 0, src.length);
public synchronized void getProfileData( long profileID, byte[] data ) {
byte[] src = profiles.get( (int)profileID ).data;
System.arraycopy( src, 0, data, 0, src.length );
}
public void getTagData(long profileID, int tagSignature, byte[] data)
{
if (tagSignature == ICC_Profile.icSigHead)
{
byte[] src = profiles.get((int)profileID);
System.arraycopy(src, 0, data, 0, 128);
return;
public void getTagData( long profileID, int tagSignature, byte[] data ) {
ProfileData profile = profiles.get( (int)profileID );
if( tagSignature == ICC_Profile.icSigHead ) {
byte[] src = profile.data;
System.arraycopy( src, 0, data, 0, HEADER_SIZE );
} else {
TagEntry entry = profile.tags.get( tagSignature );
if( entry == null ){
throw new CMMException( "tag does not exist: " + tagSignature );
}
byte[] src = entry.getData();
System.arraycopy( src, 0, data, 0, src.length );
}
throw new CMMException("Not implemented");
}
public int getTagSize(long profileID, int tagSignature)
{
if (tagSignature == ICC_Profile.icSigHead)
{
return 128;
public int getTagSize( long profileID, int tagSignature ) {
if( tagSignature == ICC_Profile.icSigHead ) {
return HEADER_SIZE;
}
throw new CMMException("Not implemented");
ProfileData profile = profiles.get( (int)profileID );
TagEntry entry = profile.tags.get( tagSignature );
if( entry == null ){
throw new CMMException( "tag does not exist: " + tagSignature );
}
return entry.getData().length;
}
public void setTagData(long profileID, int tagSignature, byte[] data)
@ -104,6 +116,35 @@ public class LCMS implements PCMM
return new DummyColorTransform();
}
private static class ProfileData{
private final byte[] data;
private final Hashtable<Integer, TagEntry> tags;
private ProfileData(byte[] data){
this.data = data;
this.tags = createTagTable( data );
}
private static Hashtable<Integer, TagEntry> createTagTable( byte[] data ) throws IllegalArgumentException {
ByteBuffer buf = ByteBuffer.wrap( data );
int nTags = buf.getInt( HEADER_SIZE );
Hashtable<Integer, TagEntry> tagTable = new Hashtable<Integer, TagEntry>();
for( int i = 0; i < nTags; i++ ) {
int sig = buf.getInt( HEADER_SIZE + i * TagEntry.entrySize + 4 );
int offset = buf.getInt( HEADER_SIZE + i * TagEntry.entrySize + 8 );
int size = buf.getInt( HEADER_SIZE + i * TagEntry.entrySize + 12 );
TagEntry te = new TagEntry( sig, offset, size, data );
if( tagTable.put( sig, te ) != null )
throw new IllegalArgumentException( "Duplicate tag in profile:" + te );
}
return tagTable;
}
}
static class DummyColorTransform implements ColorTransform
{
public int getNumInComponents()