Package com.bbn.openmap.layer.link

Source Code of com.bbn.openmap.layer.link.LinkBitmap

// **********************************************************************
//
// <copyright>
//
//  BBN Technologies
//  10 Moulton Street
//  Cambridge, MA 02138
//  (617) 873-8000
//
//  Copyright (C) BBNT Solutions LLC. All rights reserved.
//
// </copyright>
// **********************************************************************
//
// $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/layer/link/LinkBitmap.java,v $
// $RCSfile: LinkBitmap.java,v $
// $Revision: 1.3.2.3 $
// $Date: 2007/02/26 17:11:53 $
// $Author: dietrick $
//
// **********************************************************************

package com.bbn.openmap.layer.link;

import com.bbn.openmap.proj.ProjMath;
import com.bbn.openmap.omGraphics.OMBitmap;
import com.bbn.openmap.util.Debug;
import com.bbn.openmap.util.PropUtils;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

/**
* Reading and writing the Link protocol version of a bitmap..
*/
public class LinkBitmap implements LinkGraphicConstants,
        LinkPropertiesConstants {

    /**
     * Lat/Lon placement.
     *
     * @param lt latitude of the top of the image.
     * @param ln longitude of the left side of the image.
     * @param w width of the image, in pixels.
     * @param h height of the image, in pixels.
     * @param bytes bytes for the bitmap.
     * @param properties attributes for the bitmap.
     * @param dos DataOutputStream.
     * @throws IOException
     */
    public static void write(float lt, float ln, int w, int h, byte[] bytes,
                             LinkProperties properties, DataOutputStream dos)
            throws IOException {

        dos.write(Link.BITMAP_HEADER.getBytes());
        dos.writeByte(GRAPHICTYPE_BITMAP);
        dos.writeByte(RENDERTYPE_LATLON);
        dos.writeFloat(lt);
        dos.writeFloat(ln);
        dos.writeInt(w);
        dos.writeInt(h);

        dos.writeInt(bytes.length);
        dos.write(bytes, 0, bytes.length);

        properties.write(dos);
    }

    /**
     * XY placement.
     *
     * @param x1 window location of the left side of the image.
     * @param y1 window location of the top of the image.
     * @param w width of the image, in pixels.
     * @param h height of the image, in pixels.
     * @param bytes bytes for the bitmap.
     * @param properties attributes for the bitmap.
     * @param dos DataOutputStream.
     * @throws IOException
     */
    public static void write(int x1, int y1, int w, int h, byte[] bytes,
                             LinkProperties properties, DataOutputStream dos)
            throws IOException {

        dos.write(Link.BITMAP_HEADER.getBytes());
        dos.writeByte(GRAPHICTYPE_BITMAP);
        dos.writeByte(RENDERTYPE_XY);
        dos.writeInt(x1);
        dos.writeInt(y1);
        dos.writeInt(w);
        dos.writeInt(h);

        dos.writeInt(bytes.length);
        dos.write(bytes, 0, bytes.length);

        properties.write(dos);
    }

    /**
     * Lat/lon placement with XY offset.
     *
     * @param lt latitude of the top of the image, before the offset.
     * @param ln longitude of the left side of the image, before the offset.
     * @param offset_x1 number of pixels to move image to the right.
     * @param offset_y1 number of pixels to move image down.
     * @param w width of the image, in pixels.
     * @param h height of the image, in pixels.
     * @param bytes bytes for the bitmap.
     * @param properties attributes for the bitmap.
     * @param dos DataOutputStream.
     * @throws IOException
     */
    public static void write(float lt, float ln, int offset_x1, int offset_y1,
                             int w, int h, byte[] bytes,
                             LinkProperties properties, DataOutputStream dos)
            throws IOException {

        dos.write(Link.BITMAP_HEADER.getBytes());
        dos.writeByte(GRAPHICTYPE_BITMAP);
        dos.writeByte(RENDERTYPE_OFFSET);
        dos.writeFloat(lt);
        dos.writeFloat(ln);
        dos.writeInt(offset_x1);
        dos.writeInt(offset_y1);
        dos.writeInt(w);
        dos.writeInt(h);

        dos.writeInt(bytes.length);
        dos.write(bytes, 0, bytes.length);

        properties.write(dos);
    }

    /**
     * Write a bitmap to the link.
     */
    public static void write(OMBitmap bitmap, Link link, LinkProperties props)
            throws IOException {

        switch (bitmap.getRenderType()) {
        case OMBitmap.RENDERTYPE_LATLON:
            LinkBitmap.write(bitmap.getLat(),
                    bitmap.getLon(),
                    bitmap.getWidth(),
                    bitmap.getHeight(),
                    bitmap.getBits(),
                    props,
                    link.dos);
            break;
        case OMBitmap.RENDERTYPE_XY:
            LinkBitmap.write(bitmap.getX(),
                    bitmap.getY(),
                    bitmap.getWidth(),
                    bitmap.getHeight(),
                    bitmap.getBits(),
                    props,
                    link.dos);
            break;
        case OMBitmap.RENDERTYPE_OFFSET:
            LinkBitmap.write(bitmap.getLat(),
                    bitmap.getLon(),
                    bitmap.getX(),
                    bitmap.getY(),
                    bitmap.getBits(),
                    props,
                    link.dos);
            break;
        default:
            Debug.error("LinkBitmap.write: bitmap rendertype not handled.");
        }
    }

    /**
     * Read a Bitmap off a DataInputStream. Assumes the Bitmap header has
     * already been read.
     *
     * @param dis DataInputStream to read from.
     * @return OMBitmap
     * @throws IOException
     * @see com.bbn.openmap.omGraphics.OMBitmap
     */
    public static OMBitmap read(DataInputStream dis) throws IOException {
        return read(dis, null);
    }

    /**
     * Read a Bitmap off a DataInputStream. Assumes the Bitmap header has
     * already been read.
     *
     * @param dis DataInputStream to read from.
     * @param propertiesBuffer a LinkProperties object used to cache previous
     *        settings that can be set on the OMPoly being read.
     * @return OMBitmap
     * @throws IOException
     * @see com.bbn.openmap.omGraphics.OMBitmap
     */
    public static OMBitmap read(DataInputStream dis,
                                LinkProperties propertiesBuffer)
            throws IOException {

        OMBitmap bitmap = null;
        float lat = 0;
        float lon = 0;
        int x = 0;
        int y = 0;
        int w = 0;
        int h = 0;
        int length;

        int renderType = dis.readByte();

        switch (renderType) {
        case RENDERTYPE_OFFSET:
            lat = dis.readFloat();
            lon = dis.readFloat();
            // Fall through...
        case RENDERTYPE_XY:
            x = dis.readInt();
            y = dis.readInt();
            break;
        case RENDERTYPE_LATLON:
        default:
            lat = dis.readFloat();
            lon = dis.readFloat();
        }

        w = dis.readInt();
        h = dis.readInt();
        length = dis.readInt();

        byte[] bytes = new byte[length];
        dis.readFully(bytes);

        switch (renderType) {
        case RENDERTYPE_OFFSET:
            bitmap = new OMBitmap(lat, lon, x, y, w, h, bytes);
            break;
        case RENDERTYPE_XY:
            bitmap = new OMBitmap(x, y, w, h, bytes);
            break;
        case RENDERTYPE_LATLON:
        default:
            bitmap = new OMBitmap(lat, lon, w, h, bytes);
        }

        if (bitmap != null) {
            LinkProperties properties = LinkProperties.loadPropertiesIntoOMGraphic(dis, bitmap, propertiesBuffer);
            bitmap.setRotationAngle((double) ProjMath.degToRad(PropUtils.floatFromProperties(properties,
                    LPC_LINKROTATION,
                    0.0f)));
        }

        return bitmap;
    }
}
TOP

Related Classes of com.bbn.openmap.layer.link.LinkBitmap

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.