package bmpviewer; import java.awt.*; import java.awt.image.*; import java.awt.event.*; import java.io.*; import bmpviewer.bmp.*; /** * Canvas of BMP file viewer *

* @author Hiroyuki Murata * @since JDK1.1 */ class BmpCanvas extends Canvas implements ComponentListener { Frame frame; File file; BmpReader reader; int[] pix; Image img; int wid=200, hei=200; boolean isActive() { return file != null; } private boolean isbmp; boolean isBmp() { return isbmp; } BmpCanvas(Frame frame, File file) { this.frame = frame; this.file = file; setForeground(Color.red); addComponentListener(this); if (isActive()) { String lowfile = file.getName().toLowerCase(); isbmp = lowfile.endsWith(".bmp"); if (isbmp) { try { reader = new BmpReader(file); reader.read(); //System.out.println(reader.toString()); pix = reader.getPix(); wid = reader.getWidth(); hei = reader.getHeight(); } catch (IOException e) { e.printStackTrace(); } } else if (!( lowfile.endsWith(".gif") || lowfile.endsWith(".jpg") || lowfile.endsWith(".jpeg") )) { this.file = null; } } } void view() { if (isActive()) { if (isBmp()) { img = createImage( new MemoryImageSource( wid,hei, pix, 0,wid )); } else { try { img = Toolkit.getDefaultToolkit().getImage( file.getCanonicalPath() ); } catch (IOException e) { this.file = null; return; } } MediaTracker mt = new MediaTracker(this); mt.addImage(img,0); try { mt.waitForAll(); } catch (InterruptedException e) { } if (!isBmp()) { wid = img.getWidth(this); hei = img.getHeight(this); } } } String getReaderInfo() { if (isbmp) return reader.toString(); else return ""; } boolean saveBMP(File fileSave) { pix = new int[wid * hei]; PixelGrabber pg = new PixelGrabber( img, 0, 0, wid, hei, pix, 0, wid ); boolean complete = false; try { complete = pg.grabPixels(); } catch (InterruptedException e) { } try { BmpWriter writer = new BmpWriter(fileSave, pix, wid, hei); writer.write(); } catch (IOException e) { complete = false; } return complete; } public void update(Graphics g) { paint(g); } public void paint(Graphics g) { if (img == null) { g.drawString("null", 20,20); } else { g.drawImage(img,0,0,this); } } public Dimension getPreferredSize() { return new Dimension(wid,hei); } // as ComponentListener -------------------------------- public void componentShown(ComponentEvent ev) { frame.pack(); } public void componentResized(ComponentEvent ev) {} public void componentMoved(ComponentEvent ev) {} public void componentHidden(ComponentEvent ev) {} //------------------------------------------------------ protected void finalize() throws Throwable { if (img != null) img.flush(); super.finalize(); } } //######################################################################### //------------------------------------------------------------------------- //###################################################### //------------------------------------------------------ // - - - - - - - - - - - - - - - - - - - - - - - - - - -