// (c) 1998 Ekkehard Kraemer (ekraemer@pluto.camelot.de) import java.awt.*; import java.awt.image.*; import java.util.*; import java.io.*; import java.net.*; /** * Sorry, not documented yet. *

* Source */ class Images { static boolean init(Component comp,URL base,Label label) { try { System.err.println("loadAll"); loadAll(base,comp); System.err.println("splitUp"); splitUp(base,comp); System.err.println("makeTransparent"); makeTransparent(comp,label); System.err.println("setupAliases"); setupAliases(); } catch (Exception e) { e.printStackTrace(System.err); return false; } return true; } static void loadAll(URL base,Component comp) throws Exception { URL u=new URL(base,"images/all.jpg"); System.err.println(u); all=comp.getToolkit().getImage(u); MediaTracker tracker=new MediaTracker(comp);; tracker.addImage(all,1); tracker.waitForAll(); if (tracker.isErrorAny()) throw new Exception("loading all: tracker.isErrorAny()"); } static void splitUp(URL base,Component comp) throws Exception { InputStream is=new URL(base,"images/all.desc").openStream(); DataInputStream dis=new DataInputStream(is); Vector v=new Vector(); try { while (true) { String s=dis.readLine(); if (s==null) break; // System.err.println(s); StringTokenizer st=new StringTokenizer(s); String tmp=st.nextToken(); Point p=new Point(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())); v.addElement(p); } } catch (EOFException e) {} imgs=new Image[v.size()]; int y=0,t=0; for (Enumeration e=v.elements(); e.hasMoreElements(); ) { Point p=(Point)(e.nextElement()); ImageFilter f=new CropImageFilter(0,y,p.x,p.y); ImageProducer s=all.getSource(); ImageProducer ip=new FilteredImageSource(s,f); Image i=comp.createImage(ip); // MediaTracker mt=new MediaTracker(comp); // mt.addImage(i,1); // mt.waitForAll(); // if (mt.isErrorAny()) // throw new Exception("splitUp: tracker.isErrorAny(), "+p); y+=p.y; imgs[t++]=i; } } static void makeTransparent(Component comp,Label label) throws Exception { for (int t=0; t * Source */ class TransparentFilter extends RGBImageFilter { public TransparentFilter() { canFilterIndexColorModel=true; } public int filterRGB(int x, int y, int rgb) { int r = (rgb >> 16) & 0xff; int g = (rgb >> 8) & 0xff; int b = (rgb >> 0) & 0xff; float[] hsv=Color.RGBtoHSB(r,g,b,null); if (hsv[2]<0.2) return 0; return rgb; } }