Index: test/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderRawCCITTFaxTestCase.java =================================================================== --- test/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderRawCCITTFaxTestCase.java (revision 0) +++ test/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderRawCCITTFaxTestCase.java (revision 0) @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* $Id$ */ + +package org.apache.xmlgraphics.image.loader.impl; + +import junit.framework.TestCase; + +import org.apache.xmlgraphics.image.loader.ImageContext; +import org.apache.xmlgraphics.image.loader.ImageInfo; +import org.apache.xmlgraphics.image.loader.ImageSessionContext; +import org.apache.xmlgraphics.image.loader.ImageSize; +import org.apache.xmlgraphics.image.loader.MockImageContext; +import org.apache.xmlgraphics.image.loader.MockImageSessionContext; +import org.apache.xmlgraphics.util.MimeConstants; + +/** + * Test case for {@link ImageLoaderRawCCITTFax}. + */ +public class ImageLoaderRawCCITTFaxTestCase extends TestCase { + private ImageLoaderRawCCITTFax sut; + + public void testLoadImage() throws Exception { + ImageContext context = MockImageContext.newSafeInstance(); + ImageSessionContext session = new MockImageSessionContext(context); + // This image file is NOT a valid tif! It is the directory table ONLY. + ImageInfo info = new ImageInfo("dirOnly.tif", MimeConstants.MIME_TIFF); + ImageSize size = new ImageSize(); + // Size data can be retrieve by parsing the directory table in the TIFF + size.setSizeInPixels(1728, 2266); + size.setResolution(203, 192); + size.calcSizeFromPixels(); + info.setSize(size); + + sut = new ImageLoaderRawCCITTFax(); + ImageRawCCITTFax rawImage = (ImageRawCCITTFax) sut.loadImage(info, null, session); + assertEquals(2, rawImage.getCompression()); + } +} Index: test/images/dirOnly.tif =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: test/images/dirOnly.tif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: src/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderRawCCITTFax.java =================================================================== --- src/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderRawCCITTFax.java (revision 1176846) +++ src/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderRawCCITTFax.java (working copy) @@ -51,6 +51,10 @@ */ public class ImageLoaderRawCCITTFax extends AbstractImageLoader implements JPEGConstants { + private static final int COMPRESSION_CCITT_1D = 2; + private static final int COMPRESSION_FAX_GROUP3 = 3; + private static final int COMPRESSION_FAX_GROUP4 = 4; + /** logger */ protected static Log log = LogFactory.getLog(ImageLoaderRawCCITTFax.class); @@ -90,10 +94,20 @@ if (fld != null) { compression = fld.getAsInt(0); switch (compression) { - case TIFFImage.COMP_FAX_G3_1D: - case TIFFImage.COMP_FAX_G3_2D: - case TIFFImage.COMP_FAX_G4_2D: + case COMPRESSION_CCITT_1D: + case COMPRESSION_FAX_GROUP4: break; + case COMPRESSION_FAX_GROUP3: + //Note: the TIFFImage compression constants seem to be a bit misleading! + compression = TIFFImage.COMP_FAX_G3_1D; //1D is the default for Group3 + fld = dir.getField(TIFFImageDecoder.TIFF_T4_OPTIONS); + if (fld != null) { + long t4Options = fld.getAsLong(0); + if ((t4Options & 0x01) != 0) { + compression = TIFFImage.COMP_FAX_G3_2D; //"Abusing" for 2D signalling + } + } + break; default: log.debug("Unsupported compression " + compression); throw new ImageException( @@ -143,6 +157,7 @@ } /** {@inheritDoc} */ + @Override public int read(byte[] b, int off, int len) throws IOException { int result = super.read(b, off, len); if (result > 0) { @@ -155,6 +170,7 @@ } /** {@inheritDoc} */ + @Override public int read() throws IOException { int b = super.read(); if (b < 0) {