Mercurial > hg > digilib-old
comparison common/src/main/java/digilib/image/ImageLoaderDocuImage.java @ 1034:c71795594406
another fix for brgt.
fixes for mac osx 10.6.
author | robcast |
---|---|
date | Sun, 11 Mar 2012 16:35:53 +0100 |
parents | 4e368c85cce4 |
children | e4eb1209fa78 |
comparison
equal
deleted
inserted
replaced
1033:d5e181e3401c | 1034:c71795594406 |
---|---|
63 * Implementation of DocuImage using the ImageLoader API of Java 1.4 and Java2D. | 63 * Implementation of DocuImage using the ImageLoader API of Java 1.4 and Java2D. |
64 */ | 64 */ |
65 public class ImageLoaderDocuImage extends ImageInfoDocuImage { | 65 public class ImageLoaderDocuImage extends ImageInfoDocuImage { |
66 | 66 |
67 /** DocuImage version */ | 67 /** DocuImage version */ |
68 public static final String version = "ImageLoaderDocuImage 2.1.2"; | 68 public static final String version = "ImageLoaderDocuImage 2.1.3"; |
69 | 69 |
70 /** image object */ | 70 /** image object */ |
71 protected BufferedImage img; | 71 protected BufferedImage img; |
72 | 72 |
73 /** the reader object */ | 73 /** the reader object */ |
80 protected RenderingHints renderHint = null; | 80 protected RenderingHints renderHint = null; |
81 | 81 |
82 /** convolution kernels for blur() */ | 82 /** convolution kernels for blur() */ |
83 protected static Kernel[] convolutionKernels = { | 83 protected static Kernel[] convolutionKernels = { |
84 null, new Kernel(1, 1, new float[] { 1f }), | 84 null, new Kernel(1, 1, new float[] { 1f }), |
85 new Kernel(2, 2, new float[] { 0.25f, 0.25f, 0.25f, 0.25f }), | 85 new Kernel(2, 2, new float[] { 0.25f, 0.25f, |
86 new Kernel(3, 3, new float[] { 1f / 9f, 1f / 9f, 1f / 9f, 1f / 9f, 1f / 9f, 1f / 9f, 1f / 9f, 1f / 9f, 1f / 9f }) }; | 86 0.25f, 0.25f }), |
87 new Kernel(3, 3, new float[] { 1f / 9f, 1f / 9f, 1f / 9f, | |
88 1f / 9f, 1f / 9f, 1f / 9f, | |
89 1f / 9f, 1f / 9f, 1f / 9f }) }; | |
87 | 90 |
88 /* lookup tables for inverting images (byte) */ | 91 /* lookup tables for inverting images (byte) */ |
89 protected static LookupTable invertSingleByteTable; | 92 protected static LookupTable invertSingleByteTable; |
90 protected static LookupTable invertRgbaByteTable; | 93 protected static LookupTable invertRgbaByteTable; |
91 protected static boolean needsInvertRgba = false; | 94 protected static boolean needsInvertRgba = false; |
127 mapB[i] = 0; | 130 mapB[i] = 0; |
128 } | 131 } |
129 } | 132 } |
130 // should(!) work for all color models | 133 // should(!) work for all color models |
131 invertSingleByteTable = new ByteLookupTable(0, invertByte); | 134 invertSingleByteTable = new ByteLookupTable(0, invertByte); |
135 invertRgbaByteTable = invertSingleByteTable; | |
132 // but doesn't work with alpha channel on all platforms | 136 // but doesn't work with alpha channel on all platforms |
133 String ver = System.getProperty("java.version"); | 137 String ver = System.getProperty("java.version"); |
134 String os = System.getProperty("os.name"); | 138 String os = System.getProperty("os.name"); |
135 String osver = System.getProperty("os.version"); | 139 String osver = System.getProperty("os.version"); |
136 logger.debug("os="+os+" ver="+osver+" java_version="+ver); | 140 logger.debug("os="+os+" ver="+osver+" java_version="+ver); |
138 // GRAB(WTF?) works for Linux JDK1.6 with transparency | 142 // GRAB(WTF?) works for Linux JDK1.6 with transparency |
139 needsInvertRgba = true; | 143 needsInvertRgba = true; |
140 invertRgbaByteTable = new ByteLookupTable(0, new byte[][] { invertByte, invertByte, orderedByte, invertByte }); | 144 invertRgbaByteTable = new ByteLookupTable(0, new byte[][] { invertByte, invertByte, orderedByte, invertByte }); |
141 needsRescaleRgba = true; | 145 needsRescaleRgba = true; |
142 needsMapBgr = true; | 146 needsMapBgr = true; |
143 } else { | 147 } else if (os.startsWith("Mac OS X") && osver.startsWith("10.6")) { |
144 invertRgbaByteTable = invertSingleByteTable; | 148 needsRescaleRgba = true; |
145 } | 149 } |
146 // this hopefully works for all | 150 // this hopefully works for all |
147 mapBgrByteTable = new ByteLookupTable(0, new byte[][] { mapR, mapG, mapB }); | 151 mapBgrByteTable = new ByteLookupTable(0, new byte[][] { mapR, mapG, mapB }); |
148 logger.debug("ImageIO Hacks: needsRescaleRgba="+needsRescaleRgba+" needsInvertRgba="+needsInvertRgba+ | 152 logger.debug("ImageIO Hacks: needsRescaleRgba="+needsRescaleRgba+" needsInvertRgba="+needsInvertRgba+ |
149 " needsMapBgr="+needsMapBgr); | 153 " needsMapBgr="+needsMapBgr); |
558 float[] da = new float[ncol]; | 562 float[] da = new float[ncol]; |
559 for (int i = 0; i < ncol; i++) { | 563 for (int i = 0; i < ncol; i++) { |
560 dm[i] = (float) mult; | 564 dm[i] = (float) mult; |
561 da[i] = (float) add; | 565 da[i] = (float) add; |
562 } | 566 } |
563 op = new RescaleOp(dm, da, null); | 567 if (img.getColorModel().hasAlpha()) { |
568 // alpha channel should not be scaled | |
569 dm[ncol-1] = 1f; | |
570 da[ncol-1] = 0f; | |
571 } | |
572 op = new RescaleOp(dm, da, renderHint); | |
564 } else { | 573 } else { |
565 op = new RescaleOp(mult, add, renderHint); | 574 op = new RescaleOp(mult, add, renderHint); |
566 } | 575 } |
567 op.filter(img, img); | 576 op.filter(img, img); |
568 } | 577 } |