package zoom2; import java.applet.Applet; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.CropImageFilter; import java.awt.MediaTracker; import java.net.URL; import java.net.MalformedURLException; public class Zoom2 extends Applet implements ActionListener, Runnable { Object iLCK = new Object(); MediaTracker md; Image srcImg=null,wriImg=null; Dimension srcSz=null,apltSz=null; String mess_str=null; Thread thread; //boolean thread_stop=false; int srcW,srcH; private PxlImage Pxim=null; public void actionPerformed(ActionEvent e) { } public void run() { CropImageFilter crop=null; int ci,stage; while(true) { if (md.isErrorAny()) { mess_str = "[ERROR] status=" + md.statusID(0, false); repaint(); return; } else if (md.checkAll(true)) { break; } try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } srcW=srcImg.getWidth(null); srcH=srcImg.getHeight(null); srcSz =new Dimension(srcW,srcH); //prev_loop(); Pxim=new PxlImage(srcImg); Pxim.create_cropBuffer(apltSz.width,apltSz.height); repliScale(0); stage=0; mess_str = null; while(true) { if (mess_str!=null) break; // Do something... stage=do_repaint(stage); if (stage==2) break; sleeper(stage); }//while(1){... } private void sleeper(int stage) { int sleeptime; while(true) { if (stage==0) { sleeptime=500; break; } if (stage==1) { sleeptime=50; break; } sleeptime=100; break; } try { Thread.sleep(sleeptime); } catch (InterruptedException e) { e.printStackTrace(); } } //synchronized int do_repaint(int stage) int do_repaint(int stage) { int ci; if (stage==0) { stage=repliScale(stage); } else { ci=get_croppedImage(1,1); if (ci!=0x0000) { stage=2; return(stage); } } repaint(); return(stage); } private int preX=0,preY=0; private int direX=1,direY=1; private int get_croppedImage(int x, int y) { int endf; Image wri2Img; endf=0x0000; preX+=x*direX; preY+=y*direY; if ((preX+apltSz.width)>=srcW) { preX=srcW-apltSz.width; direX=-1; } if (preX<0) { preX=0; direX=1; } if ((preY+apltSz.height)>=srcH) { preY=srcH-apltSz.height; direY=-1; } if (preY<0) { preY=0; direY=1; } //wri2Img=Pxim.get_croppedImage(preX,preY,srcW-x,srcH-y); synchronized (iLCK) { wriImg=Pxim.get_croppedImage(preX,preY); } //System.out.println("executing..."); return(endf); } private int rStep=5; public int repliScale(int stage) { synchronized (iLCK) { wriImg=Pxim.get_croppedImage_stepby(0,0,rStep); } if (rStep<=1) return(stage+1); // Go next step rStep--; return(stage); } public void destroy() { } public void init() { String file,tmp; URL url=null; mess_str = "init() start..."; setVisible(true); // show() is deprecated file=getParameter("file"); if (file == null) { file="dummy.jpg";} tmp=getParameter("url"); if (tmp == null) { url=getDocumentBase(); } else { try { url=new URL(tmp); } catch (MalformedURLException e) { e.printStackTrace(); } } srcImg = getImage(url, file); md = new MediaTracker(this); md.addImage(srcImg, 0); mess_str = "Loading NOW..."; apltSz=getSize(); // applet• : apltSz.width // ‚ F apltSz.height return; } public void start() { if (thread == null) { thread = new Thread(this); thread.start(); } } public void stop() { //if (thread != null) { // thread.stop(); // thread = null; // } mess_str="stop() is called"; } //public synchronized void paint(Graphics g) public void paint(Graphics g) { if ((wriImg==null)&&(mess_str==null)) { mess_str="wriImg is null"; } if (mess_str != null) { if (apltSz==null) return; g.setColor(Color.black); g.fillRect(0, 0, apltSz.width-1, apltSz.height-1); g.setColor(Color.cyan); g.drawString(mess_str, 10, 20); } else { synchronized (iLCK) { //g.drawImage(wriImg, 0, 0, this); g.drawImage(wriImg, 0, 0, null); } } } public void update(Graphics g) { paint(g); } public void prev_loop() { wriImg=srcImg; } }