001package arcommon.image; 002 003import java.awt.Dimension; 004import java.awt.Graphics; 005import java.awt.Image; 006import java.awt.Rectangle; 007import java.awt.image.BufferedImage; 008 009import javax.swing.JComponent; 010 011public class SimpleImageJComponent extends JComponent { 012 013 private static final long serialVersionUID = -2450306462794033305L; 014 015 private BufferedImage bufferedImage; 016 private boolean scaleImage = true; 017 018 private Rectangle displayRectangle; 019 020 public SimpleImageJComponent() { 021 ; 022 } 023 024 public SimpleImageJComponent(String fileName) { 025 bufferedImage = ImageUtil.loadFromFile(fileName); 026 update(); 027 } 028 029 public void paint(Graphics g) { 030 if (bufferedImage == null) { 031 return ; 032 } 033 034 int componentWidth = getWidth() - 1; 035 int componentHeight = getHeight() - 1; 036 037 int imageWidth = bufferedImage.getWidth(); 038 int imageHeight = bufferedImage.getHeight(); 039 040 float factor; 041 if (scaleImage) { 042 factor = (float)componentHeight / imageHeight; 043 if (factor * imageWidth > componentWidth) { 044 factor = (float)componentWidth / imageWidth; 045 } 046 } else { 047 factor = 1; 048 } 049 050 int width = (int)(factor * imageWidth); 051 int height = (int)(factor * imageHeight); 052 int x = (componentWidth - width) / 2; 053 int y = (componentHeight - height) / 2; 054 055 displayRectangle = new Rectangle(x, y, width, height); 056 057 paintAt(g, x, y, width, height); 058 } 059 060 public void paintAt(Graphics g, int x, int y, int width, int height) { 061 g.drawImage(bufferedImage, x, y, width, height, null); 062 } 063 064 public int getBufferedImageWidth() { 065 return bufferedImage.getWidth(); 066 } 067 068 public int getBufferedImageHeight() { 069 return bufferedImage.getHeight(); 070 } 071 072 public Rectangle getDisplayRectangle() { 073 return displayRectangle; 074 } 075 076 private void update() { 077 if (scaleImage) { 078 setPreferredSize(new Dimension(1, 1)); 079 } else { 080 if (bufferedImage != null) { 081 setPreferredSize(new Dimension(bufferedImage.getWidth(), bufferedImage.getHeight())); 082 } 083 } 084 revalidate(); 085 repaint(); 086 } 087 088 public Image getBufferedImage() { 089 return bufferedImage; 090 } 091 092 public void setBufferedImage(BufferedImage pimage) { 093 bufferedImage = pimage; 094 update(); 095 } 096 097 public boolean getScaleImage() { 098 return scaleImage; 099 } 100 101 public void setScaleImage(boolean pscaleImage) { 102 scaleImage = pscaleImage; 103 update(); 104 } 105}