# HG changeset patch # User robcast # Date 1299257355 -3600 # Node ID 73dd59b48c5eedba9c9a012764384dbc88aa6608 # Parent ba449162d77fc267dc0877931e54a134ef4e9a32# Parent a7e157d258e86b9ba7470239f6b49d73ff200486 Merge from jquery branch a7e157d258e86b9ba7470239f6b49d73ff200486 diff -r a7e157d258e8 -r 73dd59b48c5e servlet/src/digilib/image/ImageLoaderDocuImage.java --- a/servlet/src/digilib/image/ImageLoaderDocuImage.java Tue Mar 01 22:00:50 2011 +0100 +++ b/servlet/src/digilib/image/ImageLoaderDocuImage.java Fri Mar 04 17:49:15 2011 +0100 @@ -75,21 +75,31 @@ }; /** lookup table for inverting images (byte) */ - protected static LookupTable invertByteTable; - protected static LookupTable invertRGBByteTable; + protected static LookupTable invertSingleByteTable; + protected static LookupTable invertRgbaByteTable; static { byte[] invertByte = new byte[256]; byte[] orderedByte = new byte[256]; + byte[] nullByte = new byte[256]; for (int i = 0; i < 256; ++i) { invertByte[i] = (byte) (256 - i); orderedByte[i] = (byte) i; + nullByte[i] = 0; } - // works for JPEG in q2 - invertRGBByteTable = new ByteLookupTable(0, new byte[][] { - orderedByte, invertByte, invertByte}); - // should work for all color models - invertByteTable = new ByteLookupTable(0, invertByte); + // should(!) work for all color models + invertSingleByteTable = new ByteLookupTable(0, invertByte); + // but doesn't work with alpha channel on all platforms + String ver = System.getProperty("java.version"); + String os = System.getProperty("os.name"); + logger.debug("os="+os+" ver="+ver); + if (os.startsWith("Linux") && ver.startsWith("1.6")) { + // GRAB(WTF?) works in Linux JDK1.6 with transparency + invertRgbaByteTable = new ByteLookupTable(0, new byte[][] { + invertByte, invertByte, orderedByte, invertByte}); + } else { + invertRgbaByteTable = invertSingleByteTable; + } } /** the size of the current image */ @@ -513,8 +523,15 @@ // invert colors i.e. invert every channel logger.debug("Color op: inverting"); // TODO: is this enough for all image types? - LookupOp colop = new LookupOp(invertByteTable, renderHint); + LookupTable invtbl = null; ColorModel cm = img.getColorModel(); + if (cm.hasAlpha()) { + // JDK 1.6 in Linux (at least) is broken :-( + invtbl = invertRgbaByteTable; + } else { + invtbl = invertSingleByteTable; + } + LookupOp colop = new LookupOp(invtbl, renderHint); logger.debug("colop: image="+img+" colormodel="+cm); img = colop.filter(img, null); } diff -r a7e157d258e8 -r 73dd59b48c5e servlet/src/digilib/servlet/Scaler.java --- a/servlet/src/digilib/servlet/Scaler.java Tue Mar 01 22:00:50 2011 +0100 +++ b/servlet/src/digilib/servlet/Scaler.java Fri Mar 04 17:49:15 2011 +0100 @@ -31,7 +31,7 @@ private static final long serialVersionUID = 5289386646192471549L; /** digilib servlet version (for all components) */ - public static final String version = "1.9.1a16"; + public static final String version = "1.9.1a17"; /** servlet error codes */ public static enum Error {UNKNOWN, AUTH, FILE, IMAGE};