+++ /dev/null
-package tim.prune.data;
-
-import java.awt.Dimension;
-import java.io.File;
-
-import javax.swing.ImageIcon;
-
-/**
- * Class to represent a photo and link to DataPoint
- */
-public class Photo extends MediaObject
-{
- /** Size of original image */
- private Dimension _size = null;
- /** rotation flag (clockwise from 0 to 3) */
- private int _rotation = 0;
- // TODO: Need to store caption for image?
- /** Bearing, if any */
- private double _bearing = -1.0;
- /** thumbnail for image (from exif) */
- private byte[] _exifThumbnail = null;
-
- /**
- * Constructor
- * @param inFile File object for photo
- */
- public Photo(File inFile)
- {
- super(inFile, null);
- }
-
- /**
- * Constructor using data, eg from zip file or URL
- * @param inData data as byte array
- * @param inName name of file from which it came
- * @param inUrl url from which it came (or null)
- */
- public Photo(byte[] inData, String inName, String inUrl)
- {
- super(inData, inName, inUrl);
- }
-
- /**
- * Calculate the size of the image (slow)
- */
- private void calculateSize()
- {
- ImageIcon icon = null;
- if (_file != null)
- icon = new ImageIcon(_file.getAbsolutePath());
- else
- icon = new ImageIcon(_data);
- int width = icon.getIconWidth();
- int height = icon.getIconHeight();
- if (width > 0 && height > 0)
- {
- _size = new Dimension(width, height);
- }
- }
-
- /**
- * @return size of image as Dimension object
- */
- public Dimension getSize()
- {
- if (_size == null) {
- calculateSize();
- }
- return _size;
- }
-
- /**
- * @return width of the image, if known
- */
- public int getWidth()
- {
- if (getSize() == null) {return -1;}
- return _size.width;
- }
-
- /**
- * @return height of the image, if known
- */
- public int getHeight()
- {
- if (getSize() == null) {return -1;}
- return _size.height;
- }
-
- /**
- * @return byte array of thumbnail data
- */
- public byte[] getExifThumbnail()
- {
- return _exifThumbnail;
- }
-
- /**
- * @param inBytes byte array from exif
- */
- public void setExifThumbnail(byte[] inBytes)
- {
- _exifThumbnail = inBytes;
- }
-
- /**
- * Delete the cached data when the Photo is no longer needed
- */
- public void resetCachedData()
- {
- _size = null;
- // remove thumbnail too
- }
-
- /**
- * @param inRotation initial rotation value (from exif)
- */
- public void setRotation(int inRotation)
- {
- if (inRotation >= 0 && inRotation <= 3) {
- _rotation = inRotation;
- }
- }
-
- /**
- * Rotate the image by 90 degrees
- * @param inRight true to rotate right, false for left
- */
- public void rotate(boolean inRight)
- {
- int dir = inRight?1:3;
- _rotation = (_rotation + dir) % 4;
- }
-
- /**
- * @return rotation status
- */
- public int getRotationDegrees()
- {
- return _rotation * 90;
- }
-
- /**
- * @return a new image icon for the whole image
- */
- public ImageIcon createImageIcon()
- {
- if (_file != null) {
- return new ImageIcon(_file.getAbsolutePath());
- }
- if (_data != null) {
- return new ImageIcon(_data);
- }
- return null;
- }
-
- /**
- * @param inValue bearing in degrees, 0 to 360
- */
- public void setBearing(double inValue) {
- _bearing = inValue;
- }
-
- /** @return bearing in degrees */
- public double getBearing() {
- return _bearing;
- }
-}