2014-10-07 21:04:58 -04:00
|
|
|
import java.awt.Color;
|
2014-10-08 22:40:09 -04:00
|
|
|
import java.awt.Font;
|
2014-10-07 21:04:58 -04:00
|
|
|
import java.awt.Graphics;
|
|
|
|
|
import java.awt.geom.AffineTransform;
|
|
|
|
|
import java.awt.image.AffineTransformOp;
|
|
|
|
|
import java.awt.image.BufferedImage;
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
|
|
|
|
import javax.imageio.ImageIO;
|
|
|
|
|
|
2014-10-10 14:11:17 -04:00
|
|
|
import MAndEngine.Engine;
|
2014-10-08 22:40:09 -04:00
|
|
|
import MAndEngine.ImageCreator;
|
|
|
|
|
|
2014-10-07 21:04:58 -04:00
|
|
|
public class Item {
|
|
|
|
|
|
|
|
|
|
private static int scaleToHeight;
|
2014-10-10 14:11:17 -04:00
|
|
|
|
|
|
|
|
// cropped to a thumb nail, of size 80*80
|
2014-10-07 21:04:58 -04:00
|
|
|
private final BufferedImage thumbnail;
|
2014-10-10 14:11:17 -04:00
|
|
|
|
|
|
|
|
// the original image, not cropped or anything.
|
|
|
|
|
private final BufferedImage[] image;
|
|
|
|
|
|
|
|
|
|
// Absolute path, i think.
|
2014-10-07 21:04:58 -04:00
|
|
|
private final String path;
|
|
|
|
|
private String name;
|
|
|
|
|
|
|
|
|
|
// we need this because im scared.
|
|
|
|
|
// if literally anything in the creating of an item
|
|
|
|
|
// goes MODERATELY wrong, you set this to FALSE.
|
|
|
|
|
// then we don't try and render something that
|
|
|
|
|
// makes no sense.
|
|
|
|
|
// set this to false by the end of the constructor
|
2014-10-08 22:40:09 -04:00
|
|
|
// and when it comes back to be added to the list,
|
|
|
|
|
// it'll get thrown out.
|
2014-10-07 21:04:58 -04:00
|
|
|
private boolean seemsLegit = true;
|
|
|
|
|
|
|
|
|
|
public Item(String path) {
|
|
|
|
|
|
|
|
|
|
BufferedImage thumbnail = null;
|
2014-10-10 14:11:17 -04:00
|
|
|
BufferedImage[] images = null;
|
2014-10-07 21:04:58 -04:00
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
File file = new File(path);
|
|
|
|
|
if (file.isDirectory()) {
|
2014-10-08 22:40:09 -04:00
|
|
|
thumbnail = ImageCreator.creatImageWithStripes(Viewer.THUMBNAIL_SIZE, Viewer.THUMBNAIL_SIZE, Color.BLUE);
|
2014-10-10 14:11:17 -04:00
|
|
|
|
2014-10-07 21:04:58 -04:00
|
|
|
name = file.getName();
|
|
|
|
|
|
2014-10-10 14:11:17 -04:00
|
|
|
} else {
|
|
|
|
|
if (!path.endsWith(".gif")) {
|
|
|
|
|
// try and do the image thing!
|
|
|
|
|
images = new BufferedImage[] { ImageIO.read(file) };
|
|
|
|
|
} else {
|
|
|
|
|
//images = ImageIO.
|
|
|
|
|
seemsLegit = false;
|
|
|
|
|
}
|
|
|
|
|
thumbnail = (getScaledImage(images[0], 80, 80));
|
2014-10-07 21:04:58 -04:00
|
|
|
path = file.getAbsolutePath();
|
|
|
|
|
|
|
|
|
|
name = "";
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
seemsLegit = false;
|
2014-10-08 22:40:09 -04:00
|
|
|
System.out.println("wat: " + e.getMessage());
|
|
|
|
|
System.out.println("wat was in " + path);
|
2014-10-07 21:04:58 -04:00
|
|
|
}
|
2014-10-10 14:11:17 -04:00
|
|
|
|
|
|
|
|
this.image = images;
|
2014-10-07 21:04:58 -04:00
|
|
|
this.path = path;
|
|
|
|
|
this.thumbnail = thumbnail;
|
|
|
|
|
}
|
2014-10-10 14:11:17 -04:00
|
|
|
|
2014-10-07 21:04:58 -04:00
|
|
|
public boolean getSeemsLegit() {
|
|
|
|
|
return seemsLegit;
|
|
|
|
|
}
|
|
|
|
|
|
2014-10-08 22:40:09 -04:00
|
|
|
private static BufferedImage getScaledImage(BufferedImage image, int width, int height) throws IOException {
|
2014-10-10 14:11:17 -04:00
|
|
|
|
2014-10-07 21:04:58 -04:00
|
|
|
int imageWidth = image.getWidth();
|
|
|
|
|
int imageHeight = image.getHeight();
|
2014-10-10 14:11:17 -04:00
|
|
|
|
2014-10-07 21:04:58 -04:00
|
|
|
double scaleY = (double) height / imageHeight;
|
2014-10-10 14:11:17 -04:00
|
|
|
double scaleX = (double) width / imageWidth;
|
|
|
|
|
|
|
|
|
|
// fill or fit bit
|
|
|
|
|
if (scaleX < scaleY)
|
|
|
|
|
scaleX = scaleY;
|
|
|
|
|
else
|
|
|
|
|
scaleY = scaleX;
|
|
|
|
|
|
|
|
|
|
// give us the transform object thing
|
2014-10-08 22:40:09 -04:00
|
|
|
AffineTransform scaleTransform = AffineTransform.getScaleInstance(scaleX, scaleY);
|
2014-10-10 14:11:17 -04:00
|
|
|
|
|
|
|
|
// then make the scaling algorithm thing.
|
2014-10-07 21:04:58 -04:00
|
|
|
AffineTransformOp bilinearScaleOp = new AffineTransformOp(scaleTransform, AffineTransformOp.TYPE_BILINEAR);
|
2014-10-10 14:11:17 -04:00
|
|
|
|
|
|
|
|
// out new image that we need to crop onto the buffer with the right
|
|
|
|
|
// dimensions.
|
|
|
|
|
BufferedImage newImage = bilinearScaleOp.filter(image, new BufferedImage((int) (imageWidth * scaleX), (int) (imageHeight * scaleY), image.getType()));
|
|
|
|
|
// Image newImage = image.getScaledInstance((int) (imageWidth * scaleX),
|
|
|
|
|
// (int) (imageWidth * scaleY), Image.SCALE_SMOOTH);
|
|
|
|
|
|
|
|
|
|
// make the buffer
|
2014-10-08 22:40:09 -04:00
|
|
|
BufferedImage buffer = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
|
|
|
|
|
Graphics g = buffer.getGraphics();
|
2014-10-10 14:11:17 -04:00
|
|
|
|
|
|
|
|
int newImageWidth = newImage.getWidth(null);
|
|
|
|
|
int newImageHeight = newImage.getHeight(null);
|
|
|
|
|
|
|
|
|
|
Engine.log("original: " + imageWidth + " x " + imageHeight);
|
|
|
|
|
Engine.log("new: " + width + " x " + height);
|
|
|
|
|
Engine.log("after: " + newImageWidth + " x " + newImageHeight);
|
|
|
|
|
|
|
|
|
|
// do math, shove it on.
|
|
|
|
|
g.drawImage(newImage, (width - newImageWidth) / 2, (height - newImageHeight) / 2, null);
|
|
|
|
|
|
|
|
|
|
// return dat
|
2014-10-08 22:40:09 -04:00
|
|
|
return buffer;
|
2014-10-07 21:04:58 -04:00
|
|
|
}
|
2014-10-10 14:11:17 -04:00
|
|
|
|
2014-10-07 21:04:58 -04:00
|
|
|
public BufferedImage getImage() {
|
2014-10-10 14:11:17 -04:00
|
|
|
return image[0];
|
2014-10-07 21:04:58 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public BufferedImage getThumbnail() {
|
|
|
|
|
return thumbnail;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public String getPath() {
|
|
|
|
|
return path;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public String getName() {
|
|
|
|
|
return name;
|
|
|
|
|
}
|
|
|
|
|
}
|