[vassalengine-svn-trunk] [vassalengine-svn] SF.net SVN: vassalengine:[5512] VASSAL-src/trunk
Brought to you by:
rodneykinney,
uckelman
From: <uck...@us...> - 2009-04-15 18:53:27
|
Revision: 5512 http://vassalengine.svn.sourceforge.net/vassalengine/?rev=5512&view=rev Author: uckelman Date: 2009-04-15 18:52:57 +0000 (Wed, 15 Apr 2009) Log Message: ----------- Merged 3.1@5510. Fixed Bug: Java 1.5 ImageIO fails to load PNGs with iTXt chunks Modified Paths: -------------- VASSAL-src/trunk/src/VASSAL/tools/image/ImageUtils.java VASSAL-src/trunk/src/VASSAL/tools/image/memmap/MappedImageUtils.java Property Changed: ---------------- VASSAL-src/trunk/ Property changes on: VASSAL-src/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /VASSAL-src/branches/3.1:4957,4960-4961,4984-4985,4988,4993,5004,5020,5041,5055,5059,5063-5065,5072-5073,5079,5084,5087,5098-5099,5133,5136,5138-5139,5156,5158,5161,5163,5166,5179-5181,5209,5260,5263,5274,5276,5280,5283-5290,5296,5298,5301-5450,5452-5456,5466-5467,5470,5473-5474,5479,5482,5488,5494-5495,5498,5502,5506 /VASSAL-src/branches/bsmith:4567-4756 /VASSAL-src/branches/bsmith/merge-3:5153 /VASSAL-src/branches/mkiefte:4821-4822,4867 /VASSAL-src/branches/mkiefte-3.1:5424 /VASSAL-src/branches/mkiefte-3.2:4991 /VASSAL-src/branches/rk-jabber:5293 /VASSAL-src/branches/swampwallaby-3.1:5134,5150-5151,5155,5165,5199,5257,5279,5294-5295,5303,5307-5308,5311,5319-5320,5329,5332,5352,5370,5425,5465,5468 /VASSAL-src/branches/swampwallaby-work:4458,4776,4806-4807,4819,4823-4825,4975,5067,5093 /VASSAL-src/branches/swampwallaby-work2:4840,4847,4883,4975,4980,4994,4996,4999-5000,5002-5003,5028 /VASSAL-src/branches/swampwallaby-work3:5086 /VASSAL-src/branches/swampwallaby-work5:4713 /VASSAL-src/branches/swampwallaby-work6:4727,4729-4730,4737,4742-4743,4747,4752,4776 /VASSAL-src/branches/uckelman-3.1:5389,5391,5400-5401,5403-5406,5411-5412,5415,5484-5487,5492-5493,5500-5501,5504 /VASSAL-src/branches/uckelman-findbugs:4869-4915 /VASSAL-src/branches/uckelman-work:4285,4657-4708,4769-4775,4779,4790,4799,4808,4814-4815,4817,4826,4924,4928,4933,4940,4965,4967-4971,5326,5347,5360-5361,5366-5368 + /VASSAL-src/branches/3.1:4957,4960-4961,4984-4985,4988,4993,5004,5020,5041,5055,5059,5063-5065,5072-5073,5079,5084,5087,5098-5099,5133,5136,5138-5139,5156,5158,5161,5163,5166,5179-5181,5209,5260,5263,5274,5276,5280,5283-5290,5296,5298,5301-5450,5452-5456,5466-5467,5470,5473-5474,5479,5482,5488,5494-5495,5498,5502,5506,5509-5510 /VASSAL-src/branches/bsmith:4567-4756 /VASSAL-src/branches/bsmith/merge-3:5153 /VASSAL-src/branches/mkiefte:4821-4822,4867 /VASSAL-src/branches/mkiefte-3.1:5424 /VASSAL-src/branches/mkiefte-3.2:4991 /VASSAL-src/branches/rk-jabber:5293 /VASSAL-src/branches/swampwallaby-3.1:5134,5150-5151,5155,5165,5199,5257,5279,5294-5295,5303,5307-5308,5311,5319-5320,5329,5332,5352,5370,5425,5465,5468 /VASSAL-src/branches/swampwallaby-work:4458,4776,4806-4807,4819,4823-4825,4975,5067,5093 /VASSAL-src/branches/swampwallaby-work2:4840,4847,4883,4975,4980,4994,4996,4999-5000,5002-5003,5028 /VASSAL-src/branches/swampwallaby-work3:5086 /VASSAL-src/branches/swampwallaby-work5:4713 /VASSAL-src/branches/swampwallaby-work6:4727,4729-4730,4737,4742-4743,4747,4752,4776 /VASSAL-src/branches/uckelman-3.1:5389,5391,5400-5401,5403-5406,5411-5412,5415,5484-5487,5492-5493,5500-5501,5504,5509 /VASSAL-src/branches/uckelman-findbugs:4869-4915 /VASSAL-src/branches/uckelman-work:4285,4657-4708,4769-4775,4779,4790,4799,4808,4814-4815,4817,4826,4924,4928,4933,4940,4965,4967-4971,5326,5347,5360-5361,5366-5368 Modified: VASSAL-src/trunk/src/VASSAL/tools/image/ImageUtils.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/tools/image/ImageUtils.java 2009-04-15 18:50:13 UTC (rev 5511) +++ VASSAL-src/trunk/src/VASSAL/tools/image/ImageUtils.java 2009-04-15 18:52:57 UTC (rev 5512) @@ -1,7 +1,7 @@ /* * $Id$ * - * Copyright (c) 2007-2008 by Joel Uckelman + * Copyright (c) 2007-2009 by Joel Uckelman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -347,20 +347,41 @@ return toCompatibleImage(img); } - public static boolean isMasked8BitRGBPNG(InputStream in) throws IOException { + private static final boolean iTXtBug; + + static { + final String jvmver = System.getProperty("java.version"); + iTXtBug = jvmver == null || jvmver.startsWith("1.5.0"); + } + + public static boolean useImageIO(InputStream in) throws IOException { final DataInputStream din = new DataInputStream(in); // Bail immediately if this stream is not a PNG. - if (!PNGDecoder.decodeSignature(din)) return false; + if (!PNGDecoder.decodeSignature(din)) return true; + // Numbers in comments after chunk cases here refer to sections in the + // PNG standard, found at http://www.w3.org/TR/PNG/ + PNGDecoder.Chunk ch = PNGDecoder.decodeChunk(din); + + // This is not a PNG if IHDR is not the first chunk. + if (ch.type != PNGDecoder.IHDR) return true; + + // Check whether this is an 8-bit-per-channel Truecolor image + if (ch.data[8] != 8 || ch.data[9] != 2) { + // + // ImageIO in Java 1.5 fails to handle iTXt chunks properly, so we + // must check whether this is a 1.5 JVM. If so, we cannot use ImageIO + // to load this PNG. + // + // See Sun Bug 6541476, at + // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6541476 + // + return !iTXtBug; + } + // IHDR is required to be first, and tRNS is required to appear before // the first IDAT chunk; therefore, if we find an IDAT we're done. - PNGDecoder.Chunk ch; - - ch = PNGDecoder.decodeChunk(din); - if (ch.type != PNGDecoder.IHDR) return false; - if (ch.data[8] != 8 || ch.data[9] != 2) return false; - while (true) { ch = PNGDecoder.decodeChunk(din); @@ -373,13 +394,11 @@ }); */ - // Numbers here refer to sections in the PNG standard, found - // at http://www.w3.org/TR/PNG/ switch (ch.type) { case PNGDecoder.tRNS: // 11.3.2 - return true; + return false; case PNGDecoder.IDAT: // 12.2.4 - return false; + return true; default: } } @@ -435,7 +454,7 @@ rin = new RereadableInputStream(in); rin.mark(512); - final boolean useToolkit = isMasked8BitRGBPNG(rin); + final boolean useToolkit = !useImageIO(rin); rin.reset(); if (useToolkit) { Modified: VASSAL-src/trunk/src/VASSAL/tools/image/memmap/MappedImageUtils.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/tools/image/memmap/MappedImageUtils.java 2009-04-15 18:50:13 UTC (rev 5511) +++ VASSAL-src/trunk/src/VASSAL/tools/image/memmap/MappedImageUtils.java 2009-04-15 18:52:57 UTC (rev 5512) @@ -1,7 +1,7 @@ /* * $Id$ * - * Copyright (c) 2008 by Joel Uckelman + * Copyright (c) 2008-2009 by Joel Uckelman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -61,7 +61,7 @@ rin = new RereadableInputStream(in); rin.mark(512); - final boolean useToolkit = ImageUtils.isMasked8BitRGBPNG(rin); + final boolean useToolkit = !ImageUtils.useImageIO(rin); rin.reset(); img = useToolkit ? loadWithToolkit(rin) : loadWithImageIO(rin); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ This SF.net email is sponsored by: High Quality Requirements in a Collaborative Environment. Download a free trial of Rational Requirements Composer Now! http://p.sf.net/sfu/www-ibm-com _______________________________________________ vassalengine-svn mailing list vas...@li... https://lists.sourceforge.net/lists/listinfo/vassalengine-svn |