package mil.nga.giat.geowave.format.stanag4676.image;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import mil.nga.giat.geowave.core.index.ByteArrayId;
import mil.nga.giat.geowave.core.index.StringUtils;
public class ImageChipUtils
{
public static BufferedImage getImage(
final Image img,
final int targetPixelSize,
final int type ) {
final int currentWidth = img.getWidth(null);
final int currentHeight = img.getHeight(null);
final int currentPixelSize = Math.max(
currentWidth,
currentHeight);
final double scaleFactor = (double) targetPixelSize / (double) currentPixelSize;
return getScaledImageOfType(
img,
(int) (currentWidth * scaleFactor),
(int) (currentHeight * scaleFactor),
type);
}
public static BufferedImage getScaledImageOfType(
final Image img,
final int width,
final int height,
final int type ) {
if (img instanceof BufferedImage) {
if ((((BufferedImage) img).getType() == type) && (img.getWidth(null) == width)
&& (img.getHeight(null) == height)) {
return (BufferedImage) img;
}
}
final BufferedImage scaledImage = toBufferedImage(
img.getScaledInstance(
width,
height,
Image.SCALE_SMOOTH),
type);
return scaledImage;
}
public static BufferedImage toBufferedImage(
final Image image,
final int type ) {
final BufferedImage bi = new BufferedImage(
image.getWidth(null),
image.getHeight(null),
type);
final Graphics g = bi.getGraphics();
g.drawImage(
image,
0,
0,
null);
g.dispose();
return bi;
}
public static ByteArrayId getDataId(
final String mission,
final String trackId,
final long timeMillis ) {
return new ByteArrayId(
mission + "/" + trackId + "/" + timeMillis);
}
public static ByteArrayId getTrackDataIdPrefix(
final String mission,
final String trackId ) {
return new ByteArrayId(
mission + "/" + trackId + "/");
}
public static ImageChip fromDataIdAndValue(
final ByteArrayId dataId,
final byte[] value ) {
final String dataIdStr = StringUtils.stringFromBinary(dataId.getBytes());
final String[] split = dataIdStr.split("/");
return new ImageChip(
split[0],
split[1],
Long.parseLong(split[2]),
value);
}
}