Mega Code Archive

 
Categories / Java / 2D Graphics GUI
 

Example showing how to reset the ordering of ImageReaderSpis in Image IO

/*  * Copyright (c) 2005 Sun Microsystems, Inc. All Rights Reserved.  *  * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions are met:  *  * -Redistributions of source code must retain the above copyright notice, this  * list of conditions and the following disclaimer.  *  * -Redistribution in binary form must reproduce the above copyright notice,  * this list of conditions and the following disclaimer in the documentation  * and/or other materials provided with the distribution.  *  * Neither the name of Sun Microsystems, Inc. or the names of contributors may  * be used to endorse or promote products derived from this software without  * specific prior written permission.  *  * This software is provided "AS IS," without a warranty of any kind. ALL  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY  * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR  * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE  * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING  * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS  * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,  * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER  * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF  * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE  * POSSIBILITY OF SUCH DAMAGES.  *  * You acknowledge that Software is not designed,licensed or intended for use in  * the design, construction, operation or maintenance of any nuclear facility.  */ import java.util.Iterator; import javax.imageio.spi.IIORegistry; import javax.imageio.spi.ImageReaderSpi; import javax.imageio.spi.ServiceRegistry; /**  * Example showing how to reset the ordering of ImageReaderSpis in Image I/O.  * This is particularly applicable to the case where metadata handling is a  * requirement and is of special importance for the JPEG format as the  * JAI-Image I/O JPEG plug-ins do not handle metadata and have a higher  * priority setting in the IIORegistry than do the core J2SE JPEG plug-ins.  */ public class SetOrderingExample {     public static void main(String[] args) {         IIORegistry registry = IIORegistry.getDefaultInstance();         // Print the initial ordered list of readers.         System.out.println("- Initial list of readers -");         Iterator providers =             registry.getServiceProviders(ImageReaderSpi.class, true);         while(providers.hasNext()) {             ImageReaderSpi provider = (ImageReaderSpi) providers.next();             System.out.println(provider.getPluginClassName());         }         System.out.println("");         // Get the reader SPIs for JPEG.         providers = registry.getServiceProviders(ImageReaderSpi.class,                                                  new JPEGFilter(),                                                  true);         // Save reader SPIs for JPEG according to whether they support         // native image metadata. This removes the dependence on knowing         // the class name of the associated reader plug-in.         ImageReaderSpi readerMetadataSPI = null;         ImageReaderSpi readerNoMetadataSPI = null;         while(providers.hasNext()) {             ImageReaderSpi readerSPI = (ImageReaderSpi)providers.next();             if(readerSPI.getNativeImageMetadataFormatName() != null) {                 readerMetadataSPI = readerSPI;             } else {                 readerNoMetadataSPI = readerSPI;             }         }         // Update ordering if both metadata-capable and -incapable readers         // are detected.         if(readerMetadataSPI != null && readerNoMetadataSPI != null) {             // Remove ordering that places metadata-capable reader last.             boolean unsetResult = registry.unsetOrdering(ImageReaderSpi.class,                                                          readerNoMetadataSPI,                                                          readerMetadataSPI);             // Add ordering that places metadata-capable reader first.             boolean setResult = registry.setOrdering(ImageReaderSpi.class,                                                      readerMetadataSPI,                                                      readerNoMetadataSPI);         }         // Print the final ordered list of readers.         System.out.println("- Final list of readers -");         providers = registry.getServiceProviders(ImageReaderSpi.class, true);         while(providers.hasNext()) {             ImageReaderSpi provider = (ImageReaderSpi) providers.next();             System.out.println(provider.getPluginClassName());         }     } } /**  * Filter which returns <code>true</code> if and only if the provider is  * an <code>ImageReaderSpi</code> which supports the JPEG format.  */ class JPEGFilter implements ServiceRegistry.Filter {     JPEGFilter() {}     public boolean filter(Object provider) {         if(!(provider instanceof ImageReaderSpi)) {             return false;         }         ImageReaderSpi readerSPI = (ImageReaderSpi)provider;         String[] formatNames = readerSPI.getFormatNames();         for(int i = 0; i < formatNames.length; i++) {             if(formatNames[i].equalsIgnoreCase("JPEG")) {                 return true;             }         }         return false;     } }