mirror of
https://github.com/haraldk/TwelveMonkeys.git
synced 2025-08-04 12:05:29 -04:00
#292 Preparing for Java 9 compatibility + general clean-up
This commit is contained in:
parent
37e6d31ed9
commit
ab13084f44
@ -39,6 +39,7 @@ import java.io.IOException;
|
|||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import static com.twelvemonkeys.imageio.plugins.svg.SVGProviderInfo.SVG_READER_AVAILABLE;
|
import static com.twelvemonkeys.imageio.plugins.svg.SVGProviderInfo.SVG_READER_AVAILABLE;
|
||||||
|
import static com.twelvemonkeys.imageio.util.IIOUtil.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SVGImageReaderSpi
|
* SVGImageReaderSpi
|
||||||
@ -175,7 +176,7 @@ public final class SVGImageReaderSpi extends ImageReaderSpiBase {
|
|||||||
t.printStackTrace();
|
t.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
IIOUtil.deregisterProvider(registry, this, category);
|
deregisterProvider(registry, this, category);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ import java.util.Iterator;
|
|||||||
*/
|
*/
|
||||||
// TODO: Probably possible to do less wrapping/unwrapping of data...
|
// TODO: Probably possible to do less wrapping/unwrapping of data...
|
||||||
// TODO: Consider using temp file instead of in-memory stream
|
// TODO: Consider using temp file instead of in-memory stream
|
||||||
public class WMFImageReader extends ImageReaderBase {
|
public final class WMFImageReader extends ImageReaderBase {
|
||||||
|
|
||||||
private SVGImageReader reader = null;
|
private SVGImageReader reader = null;
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
package com.twelvemonkeys.imageio.plugins.bmp;
|
package com.twelvemonkeys.imageio.plugins.bmp;
|
||||||
|
|
||||||
import com.twelvemonkeys.imageio.spi.ImageReaderSpiBase;
|
import com.twelvemonkeys.imageio.spi.ImageReaderSpiBase;
|
||||||
|
import com.twelvemonkeys.imageio.util.IIOUtil;
|
||||||
|
|
||||||
import javax.imageio.ImageReader;
|
import javax.imageio.ImageReader;
|
||||||
import javax.imageio.spi.ImageReaderSpi;
|
import javax.imageio.spi.ImageReaderSpi;
|
||||||
@ -37,9 +38,10 @@ import javax.imageio.stream.ImageInputStream;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BMPImageReaderSpi
|
* BMPImageReaderSpi
|
||||||
*
|
*
|
||||||
@ -51,24 +53,10 @@ public final class BMPImageReaderSpi extends ImageReaderSpiBase {
|
|||||||
super(new BMPProviderInfo());
|
super(new BMPProviderInfo());
|
||||||
}
|
}
|
||||||
|
|
||||||
static ImageReaderSpi lookupDefaultProvider(final ServiceRegistry registry) {
|
|
||||||
Iterator<ImageReaderSpi> providers = registry.getServiceProviders(ImageReaderSpi.class, true);
|
|
||||||
|
|
||||||
while (providers.hasNext()) {
|
|
||||||
ImageReaderSpi provider = providers.next();
|
|
||||||
|
|
||||||
if (provider.getClass().getName().equals("com.sun.imageio.plugins.bmp.BMPImageReaderSpi")) {
|
|
||||||
return provider;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public void onRegistration(final ServiceRegistry registry, final Class<?> category) {
|
public void onRegistration(final ServiceRegistry registry, final Class<?> category) {
|
||||||
ImageReaderSpi defaultProvider = lookupDefaultProvider(registry);
|
ImageReaderSpi defaultProvider = lookupProviderByName(registry, "com.sun.imageio.plugins.bmp.BMPImageReaderSpi");
|
||||||
|
|
||||||
if (defaultProvider != null) {
|
if (defaultProvider != null) {
|
||||||
// Order before com.sun provider, to aid ImageIO in selecting our reader
|
// Order before com.sun provider, to aid ImageIO in selecting our reader
|
||||||
|
@ -28,7 +28,6 @@
|
|||||||
package com.twelvemonkeys.imageio.util;
|
package com.twelvemonkeys.imageio.util;
|
||||||
|
|
||||||
import com.twelvemonkeys.image.ImageUtil;
|
import com.twelvemonkeys.image.ImageUtil;
|
||||||
import com.twelvemonkeys.imageio.spi.ProviderInfo;
|
|
||||||
|
|
||||||
import javax.imageio.IIOParam;
|
import javax.imageio.IIOParam;
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
@ -155,28 +154,32 @@ public final class IIOUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a {@link ProviderInfo} instance for the given service provider.
|
* THIS METHOD WILL ME MOVED/RENAMED, DO NOT USE.
|
||||||
*
|
*
|
||||||
* @param pProviderClass the provider class to get info for.
|
* @param registry the registry to unregister from.
|
||||||
* @return the newly created {@link ProviderInfo}.
|
* @param provider the provider to unregister.
|
||||||
|
* @param category the category to unregister from.
|
||||||
*/
|
*/
|
||||||
public static ProviderInfo getProviderInfo(final Class<? extends IIOServiceProvider> pProviderClass) {
|
public static <T> void deregisterProvider(final ServiceRegistry registry, final IIOServiceProvider provider, final Class<T> category) {
|
||||||
return new ProviderInfo(pProviderClass.getPackage());
|
// http://www.ibm.com/developerworks/java/library/j-jtp04298.html
|
||||||
|
registry.deregisterServiceProvider(category.cast(provider), category);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* THIS METHOD WILL ME MOVED/RENAMED, DO NOT USE.
|
* THIS METHOD WILL ME MOVED/RENAMED, DO NOT USE.
|
||||||
*
|
*
|
||||||
* @param pRegistry the registry to unregister from
|
* @param registry the registry to lookup from.
|
||||||
* @param pProvider the provider to unregister
|
* @param providerClassName name of the provider class.
|
||||||
* @param pCategory the category to unregister from
|
|
||||||
*
|
*
|
||||||
* @deprecated
|
* @return the provider instance, or {@code null}.
|
||||||
*/
|
*/
|
||||||
public static <T> void deregisterProvider(final ServiceRegistry pRegistry, final IIOServiceProvider pProvider, final Class<T> pCategory) {
|
public static <T> T lookupProviderByName(final ServiceRegistry registry, final String providerClassName) {
|
||||||
// http://www.ibm.com/developerworks/java/library/j-jtp04298.html
|
try {
|
||||||
// TODO: Consider placing this method in a ImageReaderSpiBase class or similar
|
return (T) registry.getServiceProviderByClass(Class.forName(providerClassName));
|
||||||
pRegistry.deregisterServiceProvider(pCategory.cast(pProvider), pCategory);
|
}
|
||||||
|
catch (ClassNotFoundException ignore) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -202,7 +205,7 @@ public final class IIOUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static String[] normalizeNames(final String[] names) {
|
private static String[] normalizeNames(final String[] names) {
|
||||||
SortedSet<String> normalizedNames = new TreeSet<String>();
|
SortedSet<String> normalizedNames = new TreeSet<>();
|
||||||
|
|
||||||
for (String name : names) {
|
for (String name : names) {
|
||||||
normalizedNames.add(name.toUpperCase());
|
normalizedNames.add(name.toUpperCase());
|
||||||
|
@ -42,7 +42,7 @@ import java.util.Locale;
|
|||||||
* @author <a href="mailto:harald.kuhr@gmail.com">Harald Kuhr</a>
|
* @author <a href="mailto:harald.kuhr@gmail.com">Harald Kuhr</a>
|
||||||
* @version $Id: IFFImageWriterSpi.java,v 1.0 28.feb.2006 19:21:05 haku Exp$
|
* @version $Id: IFFImageWriterSpi.java,v 1.0 28.feb.2006 19:21:05 haku Exp$
|
||||||
*/
|
*/
|
||||||
public class IFFImageReaderSpi extends ImageReaderSpiBase {
|
public final class IFFImageReaderSpi extends ImageReaderSpiBase {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an {@code IFFImageReaderSpi}.
|
* Creates an {@code IFFImageReaderSpi}.
|
||||||
|
@ -98,7 +98,7 @@ import java.util.List;
|
|||||||
* @author last modified by $Author: haraldk$
|
* @author last modified by $Author: haraldk$
|
||||||
* @version $Id: JPEGImageReader.java,v 1.0 24.01.11 16.37 haraldk Exp$
|
* @version $Id: JPEGImageReader.java,v 1.0 24.01.11 16.37 haraldk Exp$
|
||||||
*/
|
*/
|
||||||
public class JPEGImageReader extends ImageReaderBase {
|
public final class JPEGImageReader extends ImageReaderBase {
|
||||||
// TODO: Allow automatic rotation based on EXIF rotation field?
|
// TODO: Allow automatic rotation based on EXIF rotation field?
|
||||||
// TODO: Create a simplified native metadata format that is closer to the actual JPEG stream AND supports EXIF in a sensible way
|
// TODO: Create a simplified native metadata format that is closer to the actual JPEG stream AND supports EXIF in a sensible way
|
||||||
// TODO: As we already parse the SOF segments, maybe we should stop delegating getWidth/getHeight etc?
|
// TODO: As we already parse the SOF segments, maybe we should stop delegating getWidth/getHeight etc?
|
||||||
|
@ -41,6 +41,8 @@ import java.io.IOException;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JPEGImageReaderSpi
|
* JPEGImageReaderSpi
|
||||||
*
|
*
|
||||||
@ -48,7 +50,7 @@ import java.util.Locale;
|
|||||||
* @author last modified by $Author: haraldk$
|
* @author last modified by $Author: haraldk$
|
||||||
* @version $Id: JPEGImageReaderSpi.java,v 1.0 24.01.11 22.12 haraldk Exp$
|
* @version $Id: JPEGImageReaderSpi.java,v 1.0 24.01.11 22.12 haraldk Exp$
|
||||||
*/
|
*/
|
||||||
public class JPEGImageReaderSpi extends ImageReaderSpiBase {
|
public final class JPEGImageReaderSpi extends ImageReaderSpiBase {
|
||||||
protected ImageReaderSpi delegateProvider;
|
protected ImageReaderSpi delegateProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -64,41 +66,22 @@ public class JPEGImageReaderSpi extends ImageReaderSpiBase {
|
|||||||
*
|
*
|
||||||
* @param delegateProvider a {@code ImageReaderSpi} that can read JPEG.
|
* @param delegateProvider a {@code ImageReaderSpi} that can read JPEG.
|
||||||
*/
|
*/
|
||||||
protected JPEGImageReaderSpi(final ImageReaderSpi delegateProvider) {
|
JPEGImageReaderSpi(final ImageReaderSpi delegateProvider) {
|
||||||
this();
|
this();
|
||||||
|
|
||||||
this.delegateProvider = Validate.notNull(delegateProvider);
|
this.delegateProvider = Validate.notNull(delegateProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private JPEGImageReaderSpi(final ReaderWriterProviderInfo info) {
|
||||||
* Constructor for subclasses.
|
|
||||||
*
|
|
||||||
* @param info
|
|
||||||
*/
|
|
||||||
protected JPEGImageReaderSpi(final ReaderWriterProviderInfo info) {
|
|
||||||
super(info);
|
super(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ImageReaderSpi lookupDelegateProvider(final ServiceRegistry registry) {
|
|
||||||
Iterator<ImageReaderSpi> providers = registry.getServiceProviders(ImageReaderSpi.class, true);
|
|
||||||
|
|
||||||
while (providers.hasNext()) {
|
|
||||||
ImageReaderSpi provider = providers.next();
|
|
||||||
|
|
||||||
if (provider.getClass().getName().equals("com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi")) {
|
|
||||||
return provider;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings({"unchecked", "deprecation"})
|
@SuppressWarnings({"unchecked", "deprecation"})
|
||||||
@Override
|
@Override
|
||||||
public void onRegistration(final ServiceRegistry registry, final Class<?> category) {
|
public void onRegistration(final ServiceRegistry registry, final Class<?> category) {
|
||||||
if (delegateProvider == null) {
|
if (delegateProvider == null) {
|
||||||
// Install delegate now
|
// Install delegate now
|
||||||
delegateProvider = lookupDelegateProvider(registry);
|
delegateProvider = lookupProviderByName(registry, "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (delegateProvider != null) {
|
if (delegateProvider != null) {
|
||||||
|
@ -52,7 +52,7 @@ import java.util.Locale;
|
|||||||
* @author last modified by $Author: haraldk$
|
* @author last modified by $Author: haraldk$
|
||||||
* @version $Id: JPEGImageWriter.java,v 1.0 06.02.12 16:39 haraldk Exp$
|
* @version $Id: JPEGImageWriter.java,v 1.0 06.02.12 16:39 haraldk Exp$
|
||||||
*/
|
*/
|
||||||
public class JPEGImageWriter extends ImageWriterBase {
|
public final class JPEGImageWriter extends ImageWriterBase {
|
||||||
// TODO: Extend with functionality to be able to write CMYK JPEGs as well?
|
// TODO: Extend with functionality to be able to write CMYK JPEGs as well?
|
||||||
|
|
||||||
/** Our JPEG writing delegate */
|
/** Our JPEG writing delegate */
|
||||||
|
@ -42,6 +42,8 @@ import java.io.IOException;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import static com.twelvemonkeys.imageio.util.IIOUtil.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JPEGImageWriterSpi
|
* JPEGImageWriterSpi
|
||||||
*
|
*
|
||||||
@ -71,26 +73,12 @@ public class JPEGImageWriterSpi extends ImageWriterSpiBase {
|
|||||||
this.delegateProvider = Validate.notNull(delegateProvider);
|
this.delegateProvider = Validate.notNull(delegateProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ImageWriterSpi lookupDelegateProvider(final ServiceRegistry registry) {
|
|
||||||
Iterator<ImageWriterSpi> providers = registry.getServiceProviders(ImageWriterSpi.class, true);
|
|
||||||
|
|
||||||
while (providers.hasNext()) {
|
|
||||||
ImageWriterSpi provider = providers.next();
|
|
||||||
|
|
||||||
if (provider.getClass().getName().equals("com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi")) {
|
|
||||||
return provider;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings({"unchecked"})
|
@SuppressWarnings({"unchecked"})
|
||||||
@Override
|
@Override
|
||||||
public void onRegistration(final ServiceRegistry registry, final Class<?> category) {
|
public void onRegistration(final ServiceRegistry registry, final Class<?> category) {
|
||||||
if (delegateProvider == null) {
|
if (delegateProvider == null) {
|
||||||
// Install delegate now
|
// Install delegate now
|
||||||
delegateProvider = lookupDelegateProvider(registry);
|
delegateProvider = lookupProviderByName(registry, "com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (delegateProvider != null) {
|
if (delegateProvider != null) {
|
||||||
@ -99,7 +87,7 @@ public class JPEGImageWriterSpi extends ImageWriterSpiBase {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Or, if no delegate is found, silently deregister from the registry
|
// Or, if no delegate is found, silently deregister from the registry
|
||||||
IIOUtil.deregisterProvider(registry, this, category);
|
deregisterProvider(registry, this, category);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ import javax.imageio.stream.ImageInputStream;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
|
||||||
@ -32,10 +33,10 @@ public class JPEGImage10MetadataCleanerTest {
|
|||||||
ImageIO.setUseCache(false);
|
ImageIO.setUseCache(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static final JPEGImageReaderSpi SPI = new JPEGImageReaderSpi(lookupDelegateProvider());
|
private static final JPEGImageReaderSpi SPI = new JPEGImageReaderSpi(lookupDelegateProvider());
|
||||||
|
|
||||||
protected static ImageReaderSpi lookupDelegateProvider() {
|
private static ImageReaderSpi lookupDelegateProvider() {
|
||||||
return JPEGImageReaderSpi.lookupDelegateProvider(IIORegistry.getDefaultInstance());
|
return lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unit/regression test for #276
|
// Unit/regression test for #276
|
||||||
|
@ -58,6 +58,7 @@ import java.io.IOException;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
import static org.junit.Assume.assumeNoException;
|
import static org.junit.Assume.assumeNoException;
|
||||||
import static org.junit.Assume.assumeNotNull;
|
import static org.junit.Assume.assumeNotNull;
|
||||||
@ -74,10 +75,10 @@ import static org.mockito.Mockito.*;
|
|||||||
*/
|
*/
|
||||||
public class JPEGImageReaderTest extends ImageReaderAbstractTest<JPEGImageReader> {
|
public class JPEGImageReaderTest extends ImageReaderAbstractTest<JPEGImageReader> {
|
||||||
|
|
||||||
protected static final JPEGImageReaderSpi SPI = new JPEGImageReaderSpi(lookupDelegateProvider());
|
private static final JPEGImageReaderSpi SPI = new JPEGImageReaderSpi(lookupDelegateProvider());
|
||||||
|
|
||||||
protected static ImageReaderSpi lookupDelegateProvider() {
|
private static ImageReaderSpi lookupDelegateProvider() {
|
||||||
return JPEGImageReaderSpi.lookupDelegateProvider(IIORegistry.getDefaultInstance());
|
return lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
|
|
||||||
package com.twelvemonkeys.imageio.plugins.jpeg;
|
package com.twelvemonkeys.imageio.plugins.jpeg;
|
||||||
|
|
||||||
|
import com.twelvemonkeys.imageio.util.IIOUtil;
|
||||||
import com.twelvemonkeys.imageio.util.ImageWriterAbstractTestCase;
|
import com.twelvemonkeys.imageio.util.ImageWriterAbstractTestCase;
|
||||||
|
|
||||||
import javax.imageio.ImageWriter;
|
import javax.imageio.ImageWriter;
|
||||||
@ -51,7 +52,7 @@ public class JPEGImageWriterTest extends ImageWriterAbstractTestCase {
|
|||||||
private static final JPEGImageWriterSpi SPI = new JPEGImageWriterSpi(lookupDelegateProvider());
|
private static final JPEGImageWriterSpi SPI = new JPEGImageWriterSpi(lookupDelegateProvider());
|
||||||
|
|
||||||
private static ImageWriterSpi lookupDelegateProvider() {
|
private static ImageWriterSpi lookupDelegateProvider() {
|
||||||
return JPEGImageWriterSpi.lookupDelegateProvider(IIORegistry.getDefaultInstance());
|
return IIOUtil.lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -102,7 +102,7 @@ import java.util.List;
|
|||||||
* @todo Some MAJOR clean up
|
* @todo Some MAJOR clean up
|
||||||
* @todo As we now have Graphics2D with more options, support more of the format?
|
* @todo As we now have Graphics2D with more options, support more of the format?
|
||||||
*/
|
*/
|
||||||
public class PICTImageReader extends ImageReaderBase {
|
public final class PICTImageReader extends ImageReaderBase {
|
||||||
|
|
||||||
final static boolean DEBUG = "true".equalsIgnoreCase(System.getProperty("com.twelvemonkeys.imageio.plugins.pict.debug"));
|
final static boolean DEBUG = "true".equalsIgnoreCase(System.getProperty("com.twelvemonkeys.imageio.plugins.pict.debug"));
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ import java.util.Arrays;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
|
||||||
import static org.junit.Assume.assumeNoException;
|
import static org.junit.Assume.assumeNoException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -27,18 +28,7 @@ import static org.junit.Assume.assumeNoException;
|
|||||||
public class JPEGImageReaderTest extends ImageReaderAbstractTest {
|
public class JPEGImageReaderTest extends ImageReaderAbstractTest {
|
||||||
private static final boolean IS_JAVA_6_OR_LATER = SystemUtil.isClassAvailable("java.util.Deque");
|
private static final boolean IS_JAVA_6_OR_LATER = SystemUtil.isClassAvailable("java.util.Deque");
|
||||||
|
|
||||||
protected final ImageReaderSpi provider = lookupSpi();
|
private final ImageReaderSpi provider = lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi");
|
||||||
|
|
||||||
private ImageReaderSpi lookupSpi() {
|
|
||||||
try {
|
|
||||||
return (ImageReaderSpi) IIORegistry.getDefaultInstance().getServiceProviderByClass(Class.forName("com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi"));
|
|
||||||
}
|
|
||||||
catch (ClassNotFoundException e) {
|
|
||||||
assumeNoException(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected List<TestData> getTestData() {
|
protected List<TestData> getTestData() {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.twelvemonkeys.imageio.reference;
|
package com.twelvemonkeys.imageio.reference;
|
||||||
|
|
||||||
|
import com.twelvemonkeys.imageio.util.IIOUtil;
|
||||||
import com.twelvemonkeys.imageio.util.ImageReaderAbstractTest;
|
import com.twelvemonkeys.imageio.util.ImageReaderAbstractTest;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
@ -23,18 +24,7 @@ import static org.junit.Assume.assumeNoException;
|
|||||||
* @version $Id: PNGImageReaderTest.java,v 1.0 Oct 9, 2009 3:37:25 PM haraldk Exp$
|
* @version $Id: PNGImageReaderTest.java,v 1.0 Oct 9, 2009 3:37:25 PM haraldk Exp$
|
||||||
*/
|
*/
|
||||||
public class PNGImageReaderTest extends ImageReaderAbstractTest {
|
public class PNGImageReaderTest extends ImageReaderAbstractTest {
|
||||||
protected final ImageReaderSpi provider = lookupSpi();
|
private final ImageReaderSpi provider = IIOUtil.lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.png.PNGImageReaderSpi");
|
||||||
|
|
||||||
private ImageReaderSpi lookupSpi() {
|
|
||||||
try {
|
|
||||||
return (ImageReaderSpi) IIORegistry.getDefaultInstance().getServiceProviderByClass(Class.forName("com.sun.imageio.plugins.png.PNGImageReaderSpi"));
|
|
||||||
}
|
|
||||||
catch (ClassNotFoundException e) {
|
|
||||||
assumeNoException(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected List<TestData> getTestData() {
|
protected List<TestData> getTestData() {
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
package com.twelvemonkeys.imageio.plugins.thumbsdb;
|
package com.twelvemonkeys.imageio.plugins.thumbsdb;
|
||||||
|
|
||||||
import com.twelvemonkeys.imageio.spi.ImageReaderSpiBase;
|
import com.twelvemonkeys.imageio.spi.ImageReaderSpiBase;
|
||||||
|
import com.twelvemonkeys.imageio.util.IIOUtil;
|
||||||
import com.twelvemonkeys.io.ole2.CompoundDocument;
|
import com.twelvemonkeys.io.ole2.CompoundDocument;
|
||||||
|
|
||||||
import javax.imageio.ImageReader;
|
import javax.imageio.ImageReader;
|
||||||
@ -40,6 +41,8 @@ import java.io.IOException;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ThumbsDBImageReaderSpi
|
* ThumbsDBImageReaderSpi
|
||||||
* <p/>
|
* <p/>
|
||||||
@ -75,32 +78,21 @@ public final class ThumbsDBImageReaderSpi extends ImageReaderSpiBase {
|
|||||||
private void maybeInitJPEGProvider() {
|
private void maybeInitJPEGProvider() {
|
||||||
// NOTE: Can't do this from constructor, as ImageIO itself is not initialized yet,
|
// NOTE: Can't do this from constructor, as ImageIO itself is not initialized yet,
|
||||||
// and the lookup below will produce a NPE..
|
// and the lookup below will produce a NPE..
|
||||||
|
|
||||||
// TODO: A better approach...
|
|
||||||
// - Could have a list with known working JPEG decoders?
|
|
||||||
// - System property?
|
|
||||||
// - Class path lookup of properties file with reader?
|
|
||||||
// This way we could deregister immediately
|
|
||||||
|
|
||||||
if (jpegProvider == null) {
|
if (jpegProvider == null) {
|
||||||
ImageReaderSpi provider = null;
|
|
||||||
try {
|
|
||||||
Iterator<ImageReaderSpi> providers = getJPEGProviders();
|
|
||||||
|
|
||||||
while (providers.hasNext()) {
|
|
||||||
provider = providers.next();
|
|
||||||
|
|
||||||
// Prefer the one we know
|
// Prefer the one we know
|
||||||
if ("Sun Microsystems, Inc.".equals(provider.getVendorName())) {
|
ImageReaderSpi provider = lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi");
|
||||||
break;
|
|
||||||
}
|
if (provider == null) {
|
||||||
}
|
try {
|
||||||
|
provider = getJPEGProviders().next();
|
||||||
}
|
}
|
||||||
catch (Exception ignore) {
|
catch (Exception ignore) {
|
||||||
// It's pretty safe to assume there's always a JPEG reader out there
|
// It's pretty safe to assume there's always a JPEG reader out there
|
||||||
// In any case, we deregister the provider if there isn't one
|
// In any case, we deregister the provider if there isn't one
|
||||||
IIORegistry.getDefaultInstance().deregisterServiceProvider(this, ImageReaderSpi.class);
|
IIORegistry.getDefaultInstance().deregisterServiceProvider(this, ImageReaderSpi.class);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
jpegProvider = provider;
|
jpegProvider = provider;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,6 +79,9 @@ import java.util.*;
|
|||||||
import java.util.zip.Inflater;
|
import java.util.zip.Inflater;
|
||||||
import java.util.zip.InflaterInputStream;
|
import java.util.zip.InflaterInputStream;
|
||||||
|
|
||||||
|
import static com.twelvemonkeys.imageio.util.IIOUtil.*;
|
||||||
|
import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ImageReader implementation for Aldus/Adobe Tagged Image File Format (TIFF).
|
* ImageReader implementation for Aldus/Adobe Tagged Image File Format (TIFF).
|
||||||
* <p/>
|
* <p/>
|
||||||
@ -116,7 +119,7 @@ import java.util.zip.InflaterInputStream;
|
|||||||
* @author last modified by $Author: haraldk$
|
* @author last modified by $Author: haraldk$
|
||||||
* @version $Id: TIFFImageReader.java,v 1.0 08.05.12 15:14 haraldk Exp$
|
* @version $Id: TIFFImageReader.java,v 1.0 08.05.12 15:14 haraldk Exp$
|
||||||
*/
|
*/
|
||||||
public class TIFFImageReader extends ImageReaderBase {
|
public final class TIFFImageReader extends ImageReaderBase {
|
||||||
// TODOs ImageIO basic functionality:
|
// TODOs ImageIO basic functionality:
|
||||||
// TODO: Thumbnail support
|
// TODO: Thumbnail support
|
||||||
|
|
||||||
@ -909,8 +912,8 @@ public class TIFFImageReader extends ImageReaderBase {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
InputStream adapter = stripTileByteCounts != null
|
InputStream adapter = stripTileByteCounts != null
|
||||||
? IIOUtil.createStreamAdapter(imageInput, stripTileByteCounts[i])
|
? createStreamAdapter(imageInput, stripTileByteCounts[i])
|
||||||
: IIOUtil.createStreamAdapter(imageInput);
|
: createStreamAdapter(imageInput);
|
||||||
|
|
||||||
adapter = createDecompressorStream(compression, stripTileWidth, numBands, adapter);
|
adapter = createDecompressorStream(compression, stripTileWidth, numBands, adapter);
|
||||||
adapter = createUnpredictorStream(predictor, stripTileWidth, numBands, getBitsPerSample(), adapter, imageInput.getByteOrder());
|
adapter = createUnpredictorStream(predictor, stripTileWidth, numBands, getBitsPerSample(), adapter, imageInput.getByteOrder());
|
||||||
@ -1247,7 +1250,7 @@ public class TIFFImageReader extends ImageReaderBase {
|
|||||||
try (ImageInputStream stream = ImageIO.createImageInputStream(new SequenceInputStream(Collections.enumeration(
|
try (ImageInputStream stream = ImageIO.createImageInputStream(new SequenceInputStream(Collections.enumeration(
|
||||||
Arrays.asList(
|
Arrays.asList(
|
||||||
createJFIFStream(destRaster.getNumBands(), stripTileWidth, stripTileHeight, qTables, dcTables, acTables),
|
createJFIFStream(destRaster.getNumBands(), stripTileWidth, stripTileHeight, qTables, dcTables, acTables),
|
||||||
IIOUtil.createStreamAdapter(imageInput, stripTileByteCounts != null
|
createStreamAdapter(imageInput, stripTileByteCounts != null
|
||||||
? (int) stripTileByteCounts[i]
|
? (int) stripTileByteCounts[i]
|
||||||
: Short.MAX_VALUE),
|
: Short.MAX_VALUE),
|
||||||
new ByteArrayInputStream(new byte[] {(byte) 0xff, (byte) 0xd9}) // EOI
|
new ByteArrayInputStream(new byte[] {(byte) 0xff, (byte) 0xd9}) // EOI
|
||||||
@ -1361,19 +1364,18 @@ public class TIFFImageReader extends ImageReaderBase {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ImageReader createJPEGDelegate() throws IIOException {
|
private ImageReader createJPEGDelegate() throws IOException {
|
||||||
// TIFF is strictly ISO JPEG, so we should probably stick to the standard reader
|
// TIFF is strictly ISO JPEG, so we should probably stick to the standard reader
|
||||||
try {
|
ImageReaderSpi jpegProvider = lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi");
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
Class<ImageReader> readerClass = (Class<ImageReader>) Class.forName("com.sun.imageio.plugins.jpeg.JPEGImageReader");
|
if (jpegProvider != null) {
|
||||||
Constructor<ImageReader> constructor = readerClass.getConstructor(ImageReaderSpi.class);
|
return jpegProvider.createReaderInstance();
|
||||||
return constructor.newInstance(getOriginatingProvider());
|
|
||||||
}
|
|
||||||
catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException ignore) {
|
|
||||||
if (DEBUG) {
|
|
||||||
ignore.printStackTrace();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fall back to default reader below
|
// Fall back to default reader below
|
||||||
|
if (DEBUG) {
|
||||||
|
System.err.println("Could not create " + "com.sun.imageio.plugins.jpeg.JPEGImageReader"
|
||||||
|
+ ", falling back to default JPEG capable ImageReader");
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we can't get the standard reader, fall back to the default (first) reader
|
// If we can't get the standard reader, fall back to the default (first) reader
|
||||||
@ -2286,15 +2288,10 @@ public class TIFFImageReader extends ImageReaderBase {
|
|||||||
|
|
||||||
private static void deregisterOSXTIFFImageReaderSpi() {
|
private static void deregisterOSXTIFFImageReaderSpi() {
|
||||||
IIORegistry registry = IIORegistry.getDefaultInstance();
|
IIORegistry registry = IIORegistry.getDefaultInstance();
|
||||||
Iterator<ImageReaderSpi> providers = registry.getServiceProviders(ImageReaderSpi.class, new ServiceRegistry.Filter() {
|
ImageReaderSpi provider = lookupProviderByName(registry, "com.sun.imageio.plugins.tiff.TIFFImageReaderSpi");
|
||||||
public boolean filter(Object provider) {
|
|
||||||
return provider.getClass().getName().equals("com.sun.imageio.plugins.tiff.TIFFImageReaderSpi");
|
|
||||||
}
|
|
||||||
}, false);
|
|
||||||
|
|
||||||
while (providers.hasNext()) {
|
if (provider != null) {
|
||||||
ImageReaderSpi next = providers.next();
|
registry.deregisterServiceProvider(provider);
|
||||||
registry.deregisterServiceProvider(next);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ import java.util.Locale;
|
|||||||
* @author last modified by $Author: haraldk$
|
* @author last modified by $Author: haraldk$
|
||||||
* @version $Id: TIFFImageReaderSpi.java,v 1.0 08.05.12 15:14 haraldk Exp$
|
* @version $Id: TIFFImageReaderSpi.java,v 1.0 08.05.12 15:14 haraldk Exp$
|
||||||
*/
|
*/
|
||||||
public class TIFFImageReaderSpi extends ImageReaderSpiBase {
|
public final class TIFFImageReaderSpi extends ImageReaderSpiBase {
|
||||||
/**
|
/**
|
||||||
* Creates a {@code TIFFImageReaderSpi}.
|
* Creates a {@code TIFFImageReaderSpi}.
|
||||||
*/
|
*/
|
||||||
|
@ -99,7 +99,7 @@ public final class TIFFImageWriter extends ImageWriterBase {
|
|||||||
// Use sensible defaults for compression based on input? None is sensible... :-)
|
// Use sensible defaults for compression based on input? None is sensible... :-)
|
||||||
// Support resolution, resolution unit and software tags from ImageIO metadata
|
// Support resolution, resolution unit and software tags from ImageIO metadata
|
||||||
|
|
||||||
public static final Rational STANDARD_DPI = new Rational(72);
|
private static final Rational STANDARD_DPI = new Rational(72);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flag for active sequence writing
|
* Flag for active sequence writing
|
||||||
|
Loading…
x
Reference in New Issue
Block a user