Java examples for 2D Graphics:Image Load
Loads any image from a URL.
/*//from w ww .j a v a 2 s. c o m This file is part of leafdigital util. util is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. util is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with util. If not, see <http://www.gnu.org/licenses/>. Copyright 2011 Samuel Marshall. */ import java.awt.*; import java.awt.font.FontRenderContext; import java.awt.image.BufferedImage; import java.io.*; import java.lang.reflect.Method; import java.net.URL; import javax.swing.JPanel; public class Main{ /** Used only if we need a component for MediaTracker */ public static JPanel pStupid = null; /** * Loads any image from a URL. * @param u URL * @return Image * @throws IOException Any error */ public static Image loadImage(URL u) throws IOException { return loadImage(u.openStream(), u.getPath()); } /** * Loads an image (and waits for it to load completely). * @param is Input stream to load from * @param fileName File name (only used to check for a .jpg extension, rest can be anything) * @return Image * @throws IOException If image can't be loaded */ public static Image loadImage(InputStream is, String fileName) throws IOException { if (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg")) { return loadJPEG(is); } else { return loadOther(IOUtils.loadBytes(is)); } } /** * Loads a JPEG image using Sun's loader in preference to the standard one, * if it's available. (Probably there is no point in doing this any more...) * @param is Input stream * @return Image * @throws IOException */ public static Image loadJPEG(InputStream is) throws IOException { // If Sun's codec is present, use it (for some ungodly reason, it's twice // as fast as the normal loader). Do reflection to avoid causing link errors // if it's unavailable try { Class<?> cJPEGCodec = Class .forName("com.sun.image.codec.jpeg.JPEGCodec"); Method m = cJPEGCodec.getDeclaredMethod("createJPEGDecoder", InputStream.class); Object decoder = m.invoke(null, is); m = decoder.getClass().getDeclaredMethod( "decodeAsBufferedImage"); return (Image) m.invoke(decoder); } catch (Exception e) { return loadOther(IOUtils.loadBytes(is)); } } /** * Loads an image that isn't JPEG (with default Java loader). * @param data * @return Image (ready for display) */ public static Image loadOther(byte[] data) { Image iReturn; if (pStupid == null) pStupid = new JPanel(); iReturn = Toolkit.getDefaultToolkit().createImage(data); waitImage(iReturn); return iReturn; } private static void waitImage(Image i) { MediaTracker mt = new MediaTracker(pStupid); mt.addImage(i, 1); try { mt.waitForAll(); } catch (InterruptedException e2) { } } }