package cc.glsn.v15.moviemenu; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.TreeMap; import javax.swing.JPanel; public class ImageLoader { TreeMap Cache; BufferedImage Line; public ImageLoader() { clearCache(); } public void clearCache() { Cache=new TreeMap(); } private BufferedImage getImage(File F) { if (!Cache.containsKey(F)) { try { //System.out.println("Reading image: " + F); BufferedImage SourceImg; SourceImg=javax.imageio.ImageIO.read(F); double Width=SourceImg.getWidth(); double Height=SourceImg.getHeight(); double Ratio=Width/Height; double ScaledWidth=MovieMenu.ImageHeight * Ratio; int ScaledW=new Long(Math.round(ScaledWidth)).intValue(); BufferedImage ScaledImage; ScaledImage=new BufferedImage(ScaledW,MovieMenu.ImageHeight,BufferedImage.TYPE_4BYTE_ABGR); ScaledImage.getGraphics().drawImage(SourceImg,0,0,ScaledW-1,MovieMenu.ImageHeight-1, 0,0,SourceImg.getWidth()-1,SourceImg.getHeight()-1,null); Cache.put(F,ScaledImage); return ScaledImage; } catch (IOException e) { System.out.println("Error reading file: " + F); e.printStackTrace(); } } return Cache.get(F); } ImagePanel getImageComponent(File F) { BufferedImage I=getImage(F); if (I!=null) return new ImagePanel(I); return null; } ImagePanel getLine() { if (Line==null) Line=new BufferedImage(MovieMenu.ItemWidth,1,BufferedImage.TYPE_4BYTE_ABGR); return new ImagePanel(Line); } class ImagePanel extends JPanel { BufferedImage ScaledImage; private static final long serialVersionUID = -3064364031317747695L; public ImagePanel(BufferedImage I) { ScaledImage=I; } public ImagePanel(File F) throws IOException { } protected synchronized void paintComponent(Graphics g) { Graphics2D g2=(Graphics2D)g; Rectangle R=g.getClip().getBounds(); g2.drawImage(ScaledImage,R.x,R.y,R.x+R.width,R.y+R.height,R.x,R.y,R.x+R.width,R.y+R.height,null); } /** Used by some layout managers */ public Dimension getMaximumSize() { return getPreferredSize(); } /** Used by some layout managers */ public Dimension getMinimumSize() { return getPreferredSize(); } /** Used by some layout managers */ public Dimension getPreferredSize() { return new Dimension(ScaledImage.getWidth(),ScaledImage.getHeight()); } } }