Package com.bbn.openmap.dataAccess.image

Source Code of com.bbn.openmap.dataAccess.image.WorldFileImageReader

//**********************************************************************
//
//<copyright>
//
//BBN Technologies
//10 Moulton Street
//Cambridge, MA 02138
//(617) 873-8000
//
//Copyright (C) BBNT Solutions LLC. All rights reserved.
//
//</copyright>
//**********************************************************************
//
//$Source:
///cvs/darwars/ambush/aar/src/com/bbn/ambush/mission/MissionHandler.java,v
//$
//$RCSfile: WorldFileImageReader.java,v $
//$Revision: 1.1.2.2 $
//$Date: 2007/01/22 15:52:58 $
//$Author: dietrick $
//
//**********************************************************************

package com.bbn.openmap.dataAccess.image;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.imageio.ImageIO;
import javax.imageio.stream.FileCacheImageInputStream;

import com.bbn.openmap.image.BufferedImageHelper;
import com.bbn.openmap.omGraphics.OMRaster;
import com.bbn.openmap.proj.CADRG;
import com.bbn.openmap.util.PropUtils;

public class WorldFileImageReader implements ImageReader {

    public static Logger logger = Logger.getLogger("com.bbn.openmap.dataAccess.image.WorldFileImageReader");
    protected WorldFile worldFile;
    protected URL fileURL;

    public WorldFileImageReader(URL fileURL) throws MalformedURLException,
            IOException {
        this.fileURL = fileURL;
        worldFile = WorldFile.get(fileURL);
    }

    public BufferedImage getBufferedImage() {
        try {
            BufferedImage bi = getJAIImage(fileURL);
            if (bi == null && worldFile != null) {
                // This means that the world file was found, and that the image
                // wasn't loaded. The most likely problem that causes this
                // situation is that JAI isn't installed on the system. So,
                // let's try using ImageIO.
                bi = getImageIOImage(fileURL);
            }

            return bi;
        } catch (IOException ioe) {
            logger.info("problem reading " + fileURL + ", IOException");
            ioe.printStackTrace();
        }
        return null;
    }

    public static BufferedImage getImageIOImage(URL fileURL) throws IOException {
        FileCacheImageInputStream fciis = new FileCacheImageInputStream(fileURL.openStream(), null);
        BufferedImage fileImage = ImageIO.read(fciis);
        return fileImage;
    }

    public static BufferedImage getJAIImage(URL fileURL) throws IOException {
        return BufferedImageHelper.getJAIBufferedImage("url", fileURL);
    }

    public ImageTile getImageTile(ImageTile.Cache cache) {
        try {
            if (worldFile instanceof ErrWorldFile) {
                return new ErrImageTile(((ErrWorldFile) worldFile).getProblemMessage());
            } else if (worldFile != null) {
                BufferedImage bi = getBufferedImage();
                if (bi != null) {

                    double ulat = worldFile.getY();
                    double llon = worldFile.getX();
                    double llat = ulat + worldFile.getYDim() * bi.getHeight();
                    double rlon = llon + worldFile.getXDim() * bi.getWidth();

                    if (logger.isLoggable(Level.FINE)) {
                        logger.info("Image should be at: " + ulat + ", " + llon
                                + " - to - " + llat + ", " + rlon);
                    }

                    return new ImageTile((float) ulat, (float) llon, (float) llat, (float) rlon, this, cache);
                }
            } else {
                logger.info("World file for " + fileURL + " can't be found.");
            }

        } catch (NullPointerException npe) {
            if (logger.isLoggable(Level.FINE)) {
                logger.fine("Problem creating image (NullPointerException) from "
                        + fileURL);
                npe.printStackTrace();
            }
        }

        return null;
    }

    public ImageTile getImageTile() {
        return getImageTile(null);
    }

    public static void main(String[] args) {

        if (args.length < 1) {
            System.out.println("WorldFileImageReader:  Need a path/filename");
            System.exit(0);
        }

        logger.info("WorldFileImageReader: " + args[0]);

        String filePath = null;

        if (args.length > 0) {
            filePath = args[0];
        }

        if (filePath != null) {
            try {
                URL fileURL = PropUtils.getResourceOrFileOrURL(filePath);
                if (fileURL != null) {

                    WorldFileImageReader wfir = new WorldFileImageReader(fileURL);

                    BufferedImage bi = wfir.getBufferedImage();

                    CADRG crg = new CADRG(new com.bbn.openmap.LatLonPoint(0f, 0f), 1500000, 600, 600);

                    final OMRaster omsr = new OMRaster(0, 0, bi);
                    omsr.generate(crg);

                    java.awt.Frame window = new java.awt.Frame(filePath) {
                        public void paint(java.awt.Graphics g) {
                            if (omsr != null) {
                                omsr.render(g);
                            }
                        }
                    };

                    window.addWindowListener(new java.awt.event.WindowAdapter() {
                        public void windowClosing(java.awt.event.WindowEvent e) {
                            // need a shutdown event to notify other gui beans
                            // and
                            // then exit.
                            System.exit(0);
                        }
                    });

                    window.setSize(omsr.getWidth(), omsr.getHeight());
                    window.setVisible(true);
                    window.repaint();

                }

            } catch (MalformedURLException murle) {

            } catch (IOException ioe) {

            }
        }
    }

}
TOP

Related Classes of com.bbn.openmap.dataAccess.image.WorldFileImageReader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.