package mil.nga.giat.geowave.format.stanag4676.image; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.IOException; import javax.imageio.ImageIO; import mil.nga.giat.geowave.core.index.ByteArrayId; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ImageChip { private final static Logger LOGGER = LoggerFactory.getLogger(ImageChip.class); private final String mission; private final String trackId; private final long timeMillis; private final byte[] imageBinary; private BufferedImage image; public ImageChip( final String mission, final String trackId, final long timeMillis, final byte[] imageBinary ) { this.mission = mission; this.trackId = trackId; this.timeMillis = timeMillis; this.imageBinary = imageBinary; } public String getMission() { return mission; } public String getTrackId() { return trackId; } public long getTimeMillis() { return timeMillis; } public byte[] getImageBinary() { return imageBinary; } public ByteArrayId getDataId() { return ImageChipUtils.getDataId( mission, trackId, timeMillis); } public BufferedImage getImage( final int targetPixelSize ) { if (targetPixelSize <= 0) { final BufferedImage img = getImage(); if ((img != null) && (img.getType() != BufferedImage.TYPE_3BYTE_BGR)) { return ImageChipUtils.toBufferedImage( img, BufferedImage.TYPE_3BYTE_BGR); } } return ImageChipUtils.getImage( getImage(), targetPixelSize, BufferedImage.TYPE_3BYTE_BGR); } private synchronized BufferedImage getImage() { if (image == null) { try { image = ImageIO.read(new ByteArrayInputStream( imageBinary)); } catch (final IOException e) { LOGGER.warn( "Unable to read image chip", e); } } return image; } }