package uk.co.mmscomputing.device.twain.tiffapplet; import java.awt.Button; import java.awt.GridLayout; import java.applet.Applet; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.imageio.ImageIO; import javax.imageio.ImageWriter; import javax.imageio.IIOImage; import javax.imageio.stream.ImageOutputStream; import java.awt.image.BufferedImage; import uk.co.mmscomputing.device.scanner.Scanner; import uk.co.mmscomputing.device.scanner.ScannerDevice; import uk.co.mmscomputing.device.scanner.ScannerListener; import uk.co.mmscomputing.device.scanner.ScannerIOMetadata; import uk.co.mmscomputing.device.scanner.ScannerIOException; //import javax.imageio.ImageWriteParam; //import uk.co.mmscomputing.imageio.tiff.*; /* You need to add the META-INF/services/javax.imageio.spi.ImageWriterSpi and more or less all of uk/co/mmscomputing/io/ uk/co/mmscomputing/imageio/ uk/co/mmscomputing/math/Rational.class to applet jar */ public class TwainTiffAppletExample extends Applet implements ActionListener, ScannerListener{ Scanner scanner; Button acquireButton,selectButton; ImageWriter writer; boolean writeImage=false; public TwainTiffAppletExample(){} public void init(){ setLayout(new GridLayout(0,2)); selectButton = new Button("select"); add(selectButton); selectButton.addActionListener(this); acquireButton = new Button("acquire"); add(acquireButton); acquireButton.addActionListener(this); scanner=Scanner.getDevice(); scanner.addListener(this); writer = (ImageWriter)ImageIO.getImageWritersByFormatName("tif").next(); System.out.println(writer.getClass().getName()); // should be: uk.co.mmscomputing.imageio.tiff.TIFFImageWriter } public void actionPerformed(ActionEvent evt){ try{ if(evt.getSource()==acquireButton){ try{ File home = new File(System.getProperty("user.home")); File dir = new File(home,"My Documents"); if(!dir.exists()){ dir = home;} File file = new File(dir,"test.tif");file.delete(); showStatus(file.getCanonicalPath()); ImageOutputStream ios = ImageIO.createImageOutputStream(file); writer.setOutput(ios); writer.prepareWriteSequence(null); writeImage=true; }catch(Exception e){ writeImage=false; e.printStackTrace(); } scanner.acquire(); }else if(evt.getSource()==selectButton){ scanner.select(); } }catch(ScannerIOException se){ se.printStackTrace(); } } public void update(ScannerIOMetadata.Type type, ScannerIOMetadata metadata){ try{ if(type.equals(ScannerIOMetadata.ACQUIRED)){ BufferedImage image=metadata.getImage(); System.out.println("Have an image now!"); if(writeImage){ writer.writeToSequence(new IIOImage(image,null,null),null); } }else if(type.equals(ScannerIOMetadata.STATECHANGE)){ System.out.println(metadata.getStateStr()); if(metadata.isFinished()){ writer.endWriteSequence(); ((ImageOutputStream)writer.getOutput()).close(); } }else if(type.equals(ScannerIOMetadata.EXCEPTION)){ metadata.getException().printStackTrace(); } }catch(Exception e){ e.printStackTrace(); } } }