diff options
Diffstat (limited to 'java/ImageProcessing/framework')
38 files changed, 0 insertions, 5617 deletions
diff --git a/java/ImageProcessing/framework/BaseButton.java b/java/ImageProcessing/framework/BaseButton.java deleted file mode 100644 index 794670b2f3f..00000000000 --- a/java/ImageProcessing/framework/BaseButton.java +++ /dev/null @@ -1,234 +0,0 @@ -package imaging.framework; - -import java.awt.*; -import imaging.filters.*; - -public class BaseButton extends Panel -{ - public BaseButton (String title, String description, ImageApp parent) - { - this.setLayout (new BorderLayout ()); - this.button_ = new Button (title); - this.add ("Center", this.button_); - this.resize (100, 100); - this.description_ = description; - this.parent_ = parent; - } - - public boolean mouseEnter(Event evt, int x, int y) - { - this.parent_.displayStatus (this.description_); - return true; - } - - public boolean mouseExit(Event evt, int x, int y) - { - this.parent_.displayStatus (""); - return true; - } - - protected ImageApp parent_; - private String description_; - private Button button_; -} - -class URLDialogButton extends BaseButton -{ - public URLDialogButton (String title, String desc, ImageApp parent) - { - super (title, desc, parent); - this.openURLFrame_ = new LoadURLFrame ("Open URL <2>", this.parent_); - } - - public boolean action (Event e, Object arg) - { - this.openURLFrame_.show (); - return true; - } - private LoadURLFrame openURLFrame_; -} - -// ****************** -// Should continue to remember the password -// ****************** -class SaveButton extends BaseButton -{ - public SaveButton (String title, String desc, ImageApp parent) - { - super (title, desc, parent); - this.openURLFrame_ = new SaveURLFrame ("Save Image <2>", this.parent_); - } - - public boolean action (Event e, Object arg) - { - this.openURLFrame_.show (); - return true; - } - private SaveURLFrame openURLFrame_; -} - -class ReloadButton extends BaseButton -{ - public ReloadButton (String title, String desc, ImageApp parent) - { - super (title, desc, parent); - } - - public boolean action (Event e, Object arg) - { - this.parent_.reloadFilters (); - return true; - } -} - -class ApplyButton extends BaseButton -{ - public ApplyButton (String title, String desc, ImageApp parent) - { - super (title, desc, parent); - } - - public boolean action (Event e, Object arg) - { - this.parent_.apply (); - return true; - } -} - -class ResetButton extends BaseButton -{ - public ResetButton (String title, String desc, ImageApp parent) - { - super (title, desc, parent); - } - - public boolean action (Event e, Object arg) - { - this.parent_.resetImage (); - return true; - } -} - -class ZoomInButton extends BaseButton -{ - public ZoomInButton (String title, String desc, ImageApp parent) - { - super (title, desc, parent); - } - - public boolean action (Event e, Object arg) - { - this.parent_.zoomFactor (1.6); - return true; - } -} - -class ZoomOutButton extends BaseButton -{ - public ZoomOutButton (String title, String desc, ImageApp parent) - { - super (title, desc, parent); - } - - public boolean action (Event e, Object arg) - { - this.parent_.zoomFactor (0.625); - return true; - } -} - - -class AboutButton extends BaseButton -{ - public AboutButton (String title, String desc, ImageApp parent) - { - super (title, desc, parent); - } - - public boolean action (Event e, Object arg) - { - DialogManager.popDialog (DialogType.ABOUT, null); - return true; - } -} - -class HelpButton extends BaseButton -{ - public HelpButton (String title, String desc, ImageApp parent) - { - super (title, desc, parent); - } - - public boolean action (Event e, Object arg) - { - DialogManager.popDialog (DialogType.HELP, null); - return true; - } -} - -class ChoicePanel extends Panel -{ - public ChoicePanel (String desc, ImageApp parent) - { - this.description_ = desc; - this.parent_ = parent; - - this.loadFilters (); - // Set the layout of the Choice Panel. Note that the Choice Panel - // holds the choice button of filters. - this.setLayout (new FlowLayout ()); - this.resize (150, 100); - } - - public void choice (Choice choice) - { - this.choice_ = choice; - } - - public Choice choice () - { - return this.choice_; - } - - public void loadFilters () - { - // First remove all components of the panel including the - // choices of filters - this.removeAll (); - - // Now create new choices - this.choice_ = this.parent_.getFilters (); - - // Add the choices to our choice panel - this.add (this.choice_); - } - - public boolean mouseEnter(Event evt, int x, int y) - { - MedFilter filter = null; - String displayString = null; - String filterName = this.choice_.getSelectedItem (); - - if (filterName.compareTo ("Filters:") == 0) - displayString = "No filter selected"; - else - { - filter = (MedFilter) this.parent_.getFilter (filterName); - displayString = filter.info (); - } - this.parent_.displayStatus (displayString); - // this.parent_.displayStatus (this.description_); - return true; - } - - public boolean mouseExit(Event evt, int x, int y) - { - this.parent_.displayStatus (""); - return true; - } - - private Choice choice_; - private ImageApp parent_; - String description_; -} - diff --git a/java/ImageProcessing/framework/BenchmarkApplet.java b/java/ImageProcessing/framework/BenchmarkApplet.java deleted file mode 100644 index ac125a1d9de..00000000000 --- a/java/ImageProcessing/framework/BenchmarkApplet.java +++ /dev/null @@ -1,622 +0,0 @@ -package imaging.framework; - -import JACE.Timers.ProfileTimer; -import imaging.filters.*; -import java.awt.*; -import java.awt.image.*; -import java.applet.*; -import java.net.*; -import java.util.*; -import java.io.*; -import gjt.*; - -public class BenchmarkApplet extends Applet implements Runnable -{ - public static final Font GLOBAL_FONT = new Font("Dialog", Font.BOLD, 10); - private static final String NEW_LINE = System.getProperty("line.separator"); - private static final String WELCOME = "Welcome to MedJava Image Processing Benchmarking Tool"; - private static final String COPYRIGHT = "(c) 1997 Distributed Object Computing Group, Washington Univesity"; - private static final String ABORT = "Image Processing Tests Aborted"; - private static final String STOP = "Stop"; - private static final String START= "Start"; - private static final String CLEAR= "Clear"; - private static final String RANDOM= "Create Random Image"; - private static final int INTERNAL_ITERATIONS = 10; - private static final int TRIALS = 1; - - private List images_, filters_; - private TextArea console_; - private TextField new_image_; - private Button start_button_; - private Button stop_button_; - private Button clear_button_; - private Button random_button_; - private ButtonPanel button_panel_ = new ButtonPanel(); - private Hashtable filter_table_ = new Hashtable(); - private Hashtable image_table_ = new Hashtable(); - private Thread benchmarker_; - private long elapsed_time_; - private SpatialFilter filter_; - private Object monitor_ = new Object(); - - public void init() - { - Panel control_panel = new Panel(); - Panel sub_panel1 = new Panel(); - Panel filter_panel = new Panel(); - Panel image_panel = new Panel(); - Label image_panel_label = new Label("Images"); - Label filter_panel_label = new Label("Filters"); - - new_image_ = new TextField(); - console_ = new TextArea(); - images_ = new List(); - filters_ = new List(); - - console_.setEditable(false); - images_.setMultipleSelections(true); - filters_.setMultipleSelections(true); - console_.setFont(GLOBAL_FONT); - images_.setFont(GLOBAL_FONT); - filters_.setFont(GLOBAL_FONT); - image_panel_label.setFont(GLOBAL_FONT); - filter_panel_label.setFont(GLOBAL_FONT); - - console_.appendText(WELCOME + NEW_LINE); - console_.appendText(COPYRIGHT + NEW_LINE); - - image_panel.setLayout(new BorderLayout()); - image_panel.add("North", image_panel_label); - image_panel.add("Center", images_); - image_panel.add("South", new_image_); - - filter_panel.setLayout(new BorderLayout()); - filter_panel.add("North", filter_panel_label); - filter_panel.add("Center", filters_); - - sub_panel1.setLayout(new GridLayout(1, 2, 5, 5)); - sub_panel1.add(filter_panel); - sub_panel1.add(image_panel); - - control_panel.setLayout(new GridLayout(2, 1, 5, 5)); - control_panel.add(sub_panel1); - control_panel.add(console_); - - setLayout(new BorderLayout()); - - stop_button_ = button_panel_.add(STOP); - start_button_ = button_panel_.add(START); - clear_button_ = button_panel_.add(CLEAR); - random_button_ = button_panel_.add(RANDOM); - - stop_button_.disable(); - add("Center", control_panel); - add("South", button_panel_); - - getFilters(); - getImages(); - } - - synchronized public void run() - { - Image image; - String image_name, filter_name; - int image_height, image_width; - String[] image_list = images_.getSelectedItems(); - String[] filter_list = filters_.getSelectedItems(); - ImageProducer image_source; - FilteredImageSource filtered_image; - // BenchmarkFrame bframe = BenchmarkFrame.instance(); - - double cumulative_time; - double best_time; - - SpatialFilter.setTimer(INTERNAL_ITERATIONS); - console_.appendText(NEW_LINE); - console_.appendText("Benchmark tests: [mem=" + - Runtime.getRuntime().freeMemory() +"/" + - Runtime.getRuntime().totalMemory() +"]" - + NEW_LINE); - - for (int i = 0; i < image_list.length; i++) - { - - image_name = image_list[i]; - image = (Image)image_table_.get(image_name); - - image_width = image.getWidth(this); - image_height = image.getHeight(this); - - console_.appendText("Begining tests for image " + image_name); - console_.appendText(" (size " + image_width + "x" + image_height + - " = " + image_height*image_width*4 + " bytes )"); - console_.appendText(NEW_LINE); - - console_.appendText(NEW_LINE + " ********** " + NEW_LINE); - // bframe.init("Begining tests for image " + image_name, image, image_width, image_height); - - // if (! bframe.isShowing()) - // bframe.show(); - - for (int j = 0; j < filter_list.length; j++) - { - filter_name = filter_list[j]; - filter_ = (SpatialFilter)filter_table_.get(filter_name); - - if (filter_ == null) - System.err.println(filter_name + " is null"); - - best_time = Double.MAX_VALUE; - cumulative_time = 0; - image_source = image.getSource(); - filtered_image = new FilteredImageSource(image.getSource(), filter_); - - for (int l = 0; l < TRIALS; l++) - { - elapsed_time_ = 0; - prepareImage(createImage(filtered_image), this); - - try - { - // synchronized(monitor_) - // { - while (elapsed_time_ == 0) - { - System.out.println("Waiting for image loading to complete."); - // monitor_.wait(); - wait(); - } - - System.out.println("Image loading has completed."); - // } - } - catch(Exception excp) - { - System.out.println(excp); - stop(); - } - - cumulative_time = (double)elapsed_time_ / (double)INTERNAL_ITERATIONS; - System.out.println(image_name + " " + filter_name + " " + elapsed_time_); - - if (best_time > cumulative_time) - best_time = cumulative_time; - } - - console_.appendText(filter_name + ": best time from " + - TRIALS + " trials of " + INTERNAL_ITERATIONS + - " iterations equals: " + best_time + " ms"); - console_.appendText(NEW_LINE); - Thread.yield(); - } - - console_.appendText(NEW_LINE); - } - - console_.appendText("Tests concluded." + NEW_LINE); - - // if (bframe.isShowing()) - // bframe.hide(); - - stop_button_.disable(); - start_button_.enable(); - } - - synchronized public boolean imageUpdate(Image img, int infoflags, int x, int y, - int width, int height) - { - System.out.println("Image Update called"); - - boolean return_value = false; - try - { - if ((infoflags & ALLBITS) != 0 || - (infoflags & SOMEBITS) != 0) - { - System.out.println("notify called" + width + " " + height); - elapsed_time_ = filter_.filterTime(); - return_value = true; - // monitor_.notify(); - notifyAll(); - } - else if ((infoflags & ImageObserver.ABORT) != 0 || - (infoflags & ERROR) != 0) - { - System.out.println("image error!"); - // stop(); - return_value = true; - } - } - catch(SecurityException excp) - { - System.err.println(excp); - } - - return return_value; - } - - public void stop() - { - try - { - if (benchmarker_.isAlive()) - { - BenchmarkFrame bframe = BenchmarkFrame.instance(); - - if (bframe.isShowing()) - bframe.hide(); - - System.out.println("Stopping tests..."); - benchmarker_.stop(); - console_.appendText(NEW_LINE + ABORT + NEW_LINE); - } - - start_button_.enable(); - stop_button_.disable(); - } - catch(SecurityException exception) - { - console_.appendText(NEW_LINE + "Stop Failed." + NEW_LINE); - } - } - - public boolean action(Event evt, Object what) - { - if (what.equals(START)) - { - boolean proceed = ! (benchmarker_ != null && benchmarker_.isAlive()); - - stop_button_.enable(); - - if (proceed && - images_.getSelectedIndexes() != null && - filters_.getSelectedIndexes() != null) - { - System.out.println("Starting tests..."); - start_button_.disable(); - benchmarker_ = new Thread(this); - benchmarker_.setPriority(Math.min(Thread.currentThread().getPriority() + 2, - Thread.MAX_PRIORITY - 1)); - benchmarker_.start(); - } - } - else if (what.equals(STOP)) - { - stop(); - } - else if (what.equals(CLEAR)) - { - console_.setText(""); - console_.appendText(WELCOME + NEW_LINE); - console_.appendText(COPYRIGHT + NEW_LINE); - } - else if (what.equals(RANDOM)) - { - RandomImageDialog.instance(this).show(); - } - else if (evt.target == new_image_) - { - getSingleImage(new_image_.getText()); - } - - - return true; - } - - private void getSingleImage(String image_url) - { - Image image; - MediaTracker tracker = new MediaTracker(this); - - try - { - image = getImage(new URL(image_url)); - tracker.addImage(image, 0); - tracker.waitForID(0); - - if (image != null) - { - int index = image_url.lastIndexOf('/'); - - if (index != -1) - image_url = image_url.substring(index + 1); - - image_table_.put(image_url, image); - images_.addItem(image_url); - } - } - catch(MalformedURLException e) - { - System.err.println(e); - } - catch(InterruptedException excp) - { - System.err.println(excp); - } - - } - - private void getImages() - { - Image image; - String image_list = getParameter("images"), image_url; - StringTokenizer str_tok = new StringTokenizer(image_list, ","); - - while (str_tok.hasMoreTokens()) - { - image_url = str_tok.nextToken(); - getSingleImage(image_url); - } - } - - private void getFilters() - { - URL url; - Object download; - String config_file; - String configInfo= null; - Choice choice = new Choice (); - ImageFilter filter; - - config_file = getParameter ("configFile"); - - if (config_file == null) - config_file = "http://www.cs.wustl.edu/~pjain/java/ACE_wrappers/java/ImageProcessing/framework/filter.conf"; - - try - { - System.out.println ("Configuration File: " + config_file); - // Create a new URL - url = new URL (config_file); - - // Get the input stream and pipe it to a DataInputStream - DataInputStream iStream = new DataInputStream (url.openStream ()); - - // Create a buffer to hold all the data we get - StringBuffer tempBuf = new StringBuffer (); - // Keep reading the data until we are done - String tempString = iStream.readLine (); - while (tempString != null) - { - tempBuf.append (tempString); - tempBuf.append (" "); - tempString = iStream.readLine (); - } - - configInfo = tempBuf.toString (); - System.out.println(configInfo); - - if (configInfo != null) - { - StringTokenizer tokens = new StringTokenizer (configInfo); - String fullFilterName = null; - String filterName = null; - // Now parse the string, picking up filter names. Use these - // names to load the actual filters as well add new choices to - // the filter choices. - while (tokens.hasMoreTokens ()) - { - // Get the next token - fullFilterName = tokens.nextToken (); - filterName = this.extractFilterName (fullFilterName); - - System.out.println ("Loading: " + fullFilterName); - // Load the filter class - Class c = Class.forName (fullFilterName); - // Class c = this.filterRepository_.load (filter); - - filter = (ImageFilter)c.newInstance(); - - if (filter instanceof SpatialFilter) - { - // Add the filter to the Filter Repository - filter_table_.put(filterName, filter); - - // Add filter name to the list of filter choices - filters_.addItem (filterName); - } - } - } - } - catch (Exception e) - { - System.err.println ("Filter not found: " + e); - } - } - - private String extractFilterName (String s) - { - String filterName = null; - StringTokenizer tokens = new StringTokenizer (s, "."); - while (tokens.hasMoreTokens ()) - filterName = tokens.nextToken (); - return filterName; - } - - public void generateRandomImage(String name, int width, int height) - { - Image image = createImage(width, height); - Graphics g = image.getGraphics(); - FilteredImageSource filtered_image; - - if (g != null) - { - ImageFilter filter = new RandomizeFilter(); - g.fillRect(0, 0, width, height); - filtered_image = new FilteredImageSource(image.getSource(), filter); - image_table_.put(name, createImage(filtered_image)); - images_.addItem(name); - } - } -} - -class RandomImageDialog extends Frame -{ - private static String GENERATE = "Generate"; - private static String CANCEL = "Cancel"; - - private TextField name_ = new TextField(30), - width_ = new TextField(5), - height_= new TextField(5); - private BenchmarkApplet applet_; - private Button generate_button_; - private Button cancel_button_; - private ButtonPanel button_panel_ = new ButtonPanel(); - - private static RandomImageDialog instance_; - - public static RandomImageDialog instance(BenchmarkApplet applet) - { - if (instance_ == null) - instance_ = new RandomImageDialog(applet); - - return instance_; - } - - protected RandomImageDialog(BenchmarkApplet applet) - { - super("Generate Random Image"); - applet_ = applet; - - Panel controls = new Panel(); - GridBagLayout gb = new GridBagLayout(); - GridBagConstraints gc = new GridBagConstraints(); - Label width = new Label("Width: "), - height = new Label("Height: "), - name = new Label("Name: "); - - reshape (0, 0, 300, 200); - - controls.setLayout(gb); - gc.gridx = 0; - gc.gridy = 0; - gc.gridwidth = 1; - gc.insets = new Insets(5,5,5,5); - gc.anchor = GridBagConstraints.WEST; - width.setFont(BenchmarkApplet.GLOBAL_FONT); - gb.setConstraints(width, gc); - controls.add(width); - - gc.gridx = 1; - gc.anchor = GridBagConstraints.CENTER; - gc.fill = GridBagConstraints.HORIZONTAL; - gb.setConstraints(width_, gc); - controls.add(width_); - - gc.gridx = 2; - gc.anchor = GridBagConstraints.WEST; - gc.fill = GridBagConstraints.NONE; - height.setFont(BenchmarkApplet.GLOBAL_FONT); - gb.setConstraints(height, gc); - controls.add(height); - - gc.gridx = 3; - gc.anchor = GridBagConstraints.CENTER; - gc.fill = GridBagConstraints.HORIZONTAL; - gb.setConstraints(height_, gc); - controls.add(height_); - - gc.gridx = 0; - gc.gridy = 1; - gc.gridwidth = 1; - gc.fill = GridBagConstraints.NONE; - gc.anchor = GridBagConstraints.WEST; - name.setFont(BenchmarkApplet.GLOBAL_FONT); - gb.setConstraints(name, gc); - controls.add(name); - - gc.gridx = 1; - gc.gridwidth = GridBagConstraints.REMAINDER; - gc.anchor = GridBagConstraints.CENTER; - gc.fill = GridBagConstraints.HORIZONTAL; - gb.setConstraints(name_, gc); - controls.add(name_); - - setLayout(new BorderLayout()); - generate_button_ = button_panel_.add(GENERATE); - cancel_button_ = button_panel_.add(CANCEL); - add("Center", controls); - add("South", button_panel_); - - } - - public boolean action(Event evt, Object what) - { - if (what.equals(GENERATE)) - { - String width = width_.getText(), - height = height_.getText(), - name = name_.getText(); - - try - { - int width_num = Integer.parseInt(width), - height_num = Integer.parseInt(height); - - applet_.generateRandomImage(name, width_num, height_num); - dispose(); - } - catch(NumberFormatException nfe) - { - width_.setText(""); - height_.setText(""); - } - } - else if (what.equals(CANCEL)) - dispose(); - - return true; - } -} - -class BenchmarkFrame extends Frame -{ - private String desc_; - private Image image_; - private int height_, width_; - private static BenchmarkFrame instance_; - private static final Font FONT = new Font("Dialog", Font.BOLD, 12); - - public static BenchmarkFrame instance() - { - if (instance_ == null) - instance_ = new BenchmarkFrame(); - - return instance_; - } - - public void init(String desc, Image image, int width, int height) - { - reshape(0, 0, width, height + 50); - setImage(desc, image); - } - - public void setImage(String desc, Image image) - {/* - try - { - MediaTracker tracker = new MediaTracker(this); - tracker.addImage(image, 0); - tracker.waitForID(0); - } - catch(InterruptedException excp) - { - } - */ - desc_ = desc; - image_ = image; - } - - public void paint(Graphics g) - { - g.setColor(Color.black); - g.setFont(FONT); - g.drawImage(image_, 0, 50, this); - g.drawString(desc_, 5, 40); - } - - protected BenchmarkFrame() - { - super("Benchmark Frame"); - } -} diff --git a/java/ImageProcessing/framework/DialogManager.java b/java/ImageProcessing/framework/DialogManager.java deleted file mode 100644 index cca0c037af1..00000000000 --- a/java/ImageProcessing/framework/DialogManager.java +++ /dev/null @@ -1,277 +0,0 @@ -package imaging.framework; - -import java.awt.*; -import java.awt.image.*; -import java.applet.*; -import java.util.*; -import java.io.*; -import java.net.*; - -class DialogManager -{ - public static void initialize (Applet parent) - { - codeBase_ = parent.getCodeBase ().toString (); - aboutFrame_ = new AboutFrame (); - helpFrame_ = new HelpFrame (codeBase_); - } - - public static void popDialog (int type, String message) - { - Frame frame = null; - - switch (type) - { - case DialogType.ABOUT: - aboutFrame_.show (); - break; - case DialogType.HELP: - helpFrame_.show (); - break; - case DialogType.MALFORMED_URL: - case DialogType.NOT_SUPPORTED: - case DialogType.URL_NOT_FOUND: - frame = new MessageFrame ("Error", message); - break; - case DialogType.NOT_YET_IMPLEMENTED: - frame = new MessageFrame ("", message); - break; - } - Dimension d = Toolkit.getDefaultToolkit ().getScreenSize (); - frame.move ((d.width - frame.size ().width)/2, - (d.height - frame.size ().height)/2); - frame.show (); - } - - private static String codeBase_ = ""; - private static AboutFrame aboutFrame_; - private static HelpFrame helpFrame_; -} - -class MessageFrame extends Frame -{ - public MessageFrame (String title, String message) - { - super (title); - - this.resize (message.length () * 8, 100); - this.setLayout (new BorderLayout ()); - - this.text_ = new TextField (message); - this.text_.setEditable (false); - - Panel okButtonPanel = new Panel (); - okButtonPanel.add (this.okButton_); - okButtonPanel.resize (100, 100); - - this.add ("Center", this.text_); - this.add ("South", okButtonPanel); - } - - public boolean handleEvent (Event evt) - { - if (evt.id == Event.WINDOW_DESTROY) - { - this.dispose (); - return true; - } - return super.handleEvent (evt); - } - - // Handle all action events - public boolean action (Event e, Object arg) - { - if (e.target instanceof Button) - { - if (e.target == this.okButton_) - { - this.dispose (); - } - return true; - } - else - return false; - } - - private Button okButton_ = new Button (" ok "); - private TextField text_ = null; -} - -class AboutFrame extends Frame -{ - public AboutFrame () - { - super ("About"); - this.resize (300,300); - this.setLayout (new BorderLayout ()); - - Panel okButtonPanel = new Panel (); - okButtonPanel.add (this.okButton_); - AboutFrameTextPanel textPanel = new AboutFrameTextPanel (); - - this.add ("Center", textPanel); - this.add ("South", okButtonPanel); - } - - // Handle window destroy events - public boolean handleEvent (Event evt) - { - if (evt.id == Event.WINDOW_DESTROY) - { - this.hide (); - return true; - } - return super.handleEvent (evt); - } - - // Handle all action events - public boolean action (Event e, Object arg) - { - if (e.target instanceof Button) - { - if (e.target == this.okButton_) - { - this.hide (); - } - return true; - } - else - return false; - } - private Button okButton_ = new Button (" ok "); -} - -class AboutFrameTextPanel extends Panel -{ - public void paint (Graphics g) - { - int width = this.size ().width; - int height = this.size ().height; - - g.clearRect (0, 0, width, height); - this.setBackground (Color.cyan); - - // First draw the title - g.setFont (new Font ("TimesRoman", Font.BOLD | Font.ITALIC, 48)); - FontMetrics fontMetrics = g.getFontMetrics (); - int x = (width - fontMetrics.stringWidth (title_))/2; - int y = 100; - - Color color = g.getColor (); - g.setColor (Color.orange); - g.drawString(title_, x+2, y+2); - g.setColor (color); - g.drawString(title_, x, y); - - // Then draw author's name - g.setFont (new Font ("TimesRoman", Font.ITALIC, 24)); - fontMetrics = g.getFontMetrics (); - x = (width - fontMetrics.stringWidth (by_))/2; - y += 50; - g.drawString(by_, x, y); - - x = (width - fontMetrics.stringWidth (author_))/2; - y += 50; - g.drawString(author_, x, y); - - // Finally draw other information -- version number etc. - g.setFont (new Font ("TimesRoman", Font.ITALIC, 18)); - fontMetrics = g.getFontMetrics (); - x = (width - fontMetrics.stringWidth (info_))/2; - y += 50; - g.drawString(info_, x, y); - } - - private String title_ = "MedJava"; - private String by_ = "by"; - private String author_ = "Prashant Jain"; - private String info_ = "Version 1.0"; -} - -class HelpFrame extends Frame -{ - public HelpFrame (String codeBase) - { - super ("Help"); - this.setBackground (Color.white); - this.text_.setEditable (false); - Font defaultFont = new Font ("TimesRoman", Font.PLAIN, 14); - this.text_.setFont (defaultFont); - - try - { - URL url = new URL (codeBase + "../ImageProcessing/framework/help.conf"); - String delim = "\n"; - - // Get the input stream and pipe it to a DataInputStream - DataInputStream iStream = new DataInputStream (url.openStream ()); - - // Keep reading the data until we are done - String tempString = iStream.readLine (); - while (tempString != null) - { - if (tempString.startsWith ("<START>")) - delim = ""; - else if (tempString.startsWith ("<END>")) - delim = "\n"; - else if (tempString.startsWith ("<TAB>")) - this.text_.appendText ("\t"); - else if (tempString.startsWith ("<P>")) - this.text_.appendText ("\n"); - else - { - this.text_.appendText (tempString); - this.text_.appendText (delim); - } - tempString = iStream.readLine (); - } - } - catch (MalformedURLException e) - { - System.err.println (e); - } - catch (IOException e) - { - System.err.println (e); - } - - this.resize (600,700); - this.setLayout (new BorderLayout ()); - - Panel okButtonPanel = new Panel (); - okButtonPanel.add (this.okButton_); - this.add ("South", okButtonPanel); - this.add ("Center", this.text_); - } - - // Handle window destroy events - public boolean handleEvent (Event evt) - { - if (evt.id == Event.WINDOW_DESTROY) - { - this.hide (); - return true; - } - return super.handleEvent (evt); - } - - // Handle all action events - public boolean action (Event e, Object arg) - { - if (e.target instanceof Button) - { - if (e.target == this.okButton_) - { - this.hide (); - } - return true; - } - else - return false; - } - - private Vector helpInfo_ = new Vector (); - private Button okButton_ = new Button (" ok "); - private TextArea text_ = new TextArea (); -} - diff --git a/java/ImageProcessing/framework/DialogType.java b/java/ImageProcessing/framework/DialogType.java deleted file mode 100644 index c95372c08e1..00000000000 --- a/java/ImageProcessing/framework/DialogType.java +++ /dev/null @@ -1,11 +0,0 @@ -package imaging.framework; - -public class DialogType -{ - public static final int ABOUT = 0; - public static final int MALFORMED_URL = 1; - public static final int URL_NOT_FOUND = 2; - public static final int NOT_SUPPORTED = 3; - public static final int HELP = 4; - public static final int NOT_YET_IMPLEMENTED = 10; -} diff --git a/java/ImageProcessing/framework/FileBrowser.java b/java/ImageProcessing/framework/FileBrowser.java deleted file mode 100644 index 27245b1f2f4..00000000000 --- a/java/ImageProcessing/framework/FileBrowser.java +++ /dev/null @@ -1,173 +0,0 @@ -package imaging.framework; - -import java.awt.*; -import java.awt.image.*; -import java.net.*; -import java.applet.*; -import gjt.Separator; -import gjt.ComponentScroller; - -class FileNode extends HierarchyAdapter -{ - public FileNode (String name, - Icon icon, - boolean root, - ImageApp app) - { - super (name, icon, root); - this.app_ = app; - } - - public FileNode (String name, - Icon icon, - ListFiles list, - ImageApp app) - { - super (name, icon); - this.list_ = list; - this.app_ = app; - } - - public ImageApp app () - { - return this.app_; - } - - public void handleEvent () - { - String s = null; - String pString = ""; - Hierarchy p = this.getHierarchyParent (); - - while (p != null) - { - pString = p.getName () + pString; - p = p.getHierarchyParent (); - } - - if (pString.endsWith ("/")) - s = "http://" + pString + this.getName (); - else - s = "http://" + pString + "/" + this.getName (); - - System.out.println ("Opening: " + s); - - // If list is null, then it is a file, else it is a directory and - // use list to get the rest of the directory. - if (this.list_ == null) - this.app_.openURL (s); // It is a file - else - this.list_.listFiles (s, this); // It is a directory. - } - - private ListFiles list_ = null; - private ImageApp app_ = null; -} - -class BrowserPanel extends Panel -{ - public BrowserPanel (ImageApp parent) - { - this.resize (300, 300); - this.parent_ = parent; - this.setLayout (new BorderLayout ()); - } - - public int initialize (String url, ListFiles list) - { - String directory = null; - int index = -1; - - String pString = list.stripProtocolHeader (url); - if (!pString.endsWith ("/")) - pString = pString + "/"; - - try - { - Icon dirIcon = new Icon (this.parent_.getCodeBase () + - "../ImageProcessing/framework/" + - "file03.gif", (Applet) this.parent_); - System.out.println (this.parent_.getCodeBase () + - "../ImageProcessing/framework/" + - "file03.gif"); - this.root_ = new FileNode (pString, - dirIcon, true, this.parent_); - } - catch (MalformedURLException e) - { - } - - int count = list.listFiles (url, this.root_); - // System.out.println ("Count: " + count); - if (count > 0) - { - // Add the root to the component scroller and then add the - // component scroller to the panel. - this.scroller_ = new ComponentScroller (this.root_); - this.add ("Center", this.scroller_); - } - return count; - } - - private FileNode root_ = null; - private ImageApp parent_; - private ComponentScroller scroller_; -} - -class FileBrowser extends Frame -{ - public FileBrowser (String title, ImageApp parent) - { - super (title); - this.resize (300, 300); - this.browser_ = new BrowserPanel (parent); - this.setLayout (new BorderLayout ()); - - this.cancelButton_ = new Button (" cancel "); - Panel buttonPanel = new Panel (); - buttonPanel.add (this.cancelButton_); - buttonPanel.resize (100, 100); - - Panel southPanel = new Panel (); - southPanel.setLayout (new BorderLayout ()); - southPanel.add ("North", new Separator ()); - southPanel.add ("South", buttonPanel); - this.add ("South", southPanel); - this.add ("Center", this.browser_); - } - - public int initialize (String url, ListFiles list) - { - return this.browser_.initialize (url, list); - } - - // Handle window destroy events - public boolean handleEvent (Event evt) - { - if (evt.id == Event.WINDOW_DESTROY) - { - this.dispose (); - return true; - } - return super.handleEvent (evt); - } - - // Handle all action events - public boolean action (Event e, Object arg) - { - if (e.target instanceof Button) - { - if (e.target == this.cancelButton_) - { - this.dispose (); - } - validate (); - return true; - } - else - return false; - } - - private Button cancelButton_;; - private BrowserPanel browser_; -} diff --git a/java/ImageProcessing/framework/FilePanel.java b/java/ImageProcessing/framework/FilePanel.java deleted file mode 100644 index f8ffc7dbca8..00000000000 --- a/java/ImageProcessing/framework/FilePanel.java +++ /dev/null @@ -1,161 +0,0 @@ -package imaging.framework; - -import java.awt.*; - -// Create a panel for all the buttons -class FilePanel extends Panel -{ - FilePanel (ImageApp parent) - { - this.parent_ = parent; - - this.setLayout (new GridLayout (2, 1)); - - // First create all the buttons - this.URLDialogButton_ = new URLDialogButton ("Open URL", "Download an image", this.parent_); - this.saveButton_ = new SaveButton ("Save", "Upload an image", this.parent_); - - // Place the created buttons in the panel - this.add (this.URLDialogButton_); - this.add (this.saveButton_); - - // Disable the save button for now - this.disableSaveButton (); - this.resize (400, 400); - } - - public void enableSaveButton () - { - this.saveButton_.enable (); - } - - public void disableSaveButton () - { - this.saveButton_.disable (); - } - - // All the created buttons - private URLDialogButton URLDialogButton_; - private SaveButton saveButton_; - - private ImageApp parent_; -} - -// Create a panel for all the buttons -class ResetPanel extends Panel -{ - ResetPanel (ImageApp parent) - { - this.parent_ = parent; - - this.setLayout (new GridLayout (2, 1)); - - // First create all the buttons - this.reloadButton_ = new ReloadButton ("Reload Filters", "Reload all filters", this.parent_); - - // ********************** - // Disable this until it works - // ********************** - this.reloadButton_.disable(); - - - this.resetButton_ = new ResetButton ("Reset", "Reset the image", this.parent_); - - - // Place the created buttons in the panel - this.add (this.resetButton_); - this.add (this.reloadButton_); - - this.resize (400, 400); - } - - // All the created buttons - private ReloadButton reloadButton_; - private ResetButton resetButton_; - - private ImageApp parent_; -} - - -class ZoomPanel extends Panel -{ - ZoomPanel (ImageApp parent) - { - this.parent_ = parent; - - this.setLayout (new GridLayout (2, 1)); - - // First create the two zoom buttons - this.zoomInButton_ = new ZoomInButton ("<< Zoom in", "Zoom into the image", this.parent_); - this.zoomOutButton_ = new ZoomOutButton ("Zoom out >>", "Zoom out of the image", this.parent_); - - // Now add the buttons to the panel - this.add (this.zoomInButton_); - this.add (this.zoomOutButton_); - - this.resize (100, 100); - } - - private ZoomInButton zoomInButton_; - private ZoomOutButton zoomOutButton_; - - private ImageApp parent_; -} - - -class FilterPanel extends Panel -{ - FilterPanel (ImageApp parent) - { - this.parent_ = parent; - - this.setLayout (new GridLayout (2, 1)); - this.applyButton_ = new ApplyButton ("Apply", "Apply the selected filter", this.parent_); - - // Set the layout of the Choice Panel. Note that the Choice Panel - // holds the choice button of filters. - this.choicePanel_ = new ChoicePanel ("Select filter", this.parent_); - - this.add (this.applyButton_); - this.add (this.choicePanel_); - this.resize (200,200); - } - - public Choice choice () - { - return this.choicePanel_.choice (); - } - - public void loadFilters () - { - this.choicePanel_.loadFilters (); - } - - private ChoicePanel choicePanel_; - private ApplyButton applyButton_; - private ImageApp parent_; -} - -class HelpPanel extends Panel -{ - HelpPanel (ImageApp parent) - { - this.parent_ = parent; - - this.setLayout (new GridLayout (2, 1)); - - this.aboutButton_ = new AboutButton ("About", "About the applet", this.parent_); - this.helpButton_ = new HelpButton ("Help", "Help on how to use the applet", this.parent_); - - // Now add the buttons to the panel - this.add (this.aboutButton_); - this.add (this.helpButton_); - - this.resize (100, 100); - } - - private AboutButton aboutButton_; - private HelpButton helpButton_; - - private ImageApp parent_; -} diff --git a/java/ImageProcessing/framework/FilterTest.java b/java/ImageProcessing/framework/FilterTest.java deleted file mode 100644 index b1e33482be9..00000000000 --- a/java/ImageProcessing/framework/FilterTest.java +++ /dev/null @@ -1,62 +0,0 @@ -package imaging.framework; - -import java.awt.*; -import java.awt.image.*; -import imaging.filters.Timer; - -public class FilterTest -{ - public static void main(String[] args) - { - Timer timer = new Timer(); - ImageProcessor ip = new ImageProcessor(); - ImageFilterFactory iff = new ImageFilterFactory(); - Frame frame = new Frame("Rotate Example"); - Toolkit tk = Toolkit.getDefaultToolkit(); - Dimension d = tk.getScreenSize(); - Image old_image = tk.getImage("myphoto.gif"), image; - int image_x, image_y, x = 50, y = 50; - Graphics g; - - frame.reshape(d.width/4, d.height/8, d.width/2, 3*d.height/4); - frame.show(); - g = frame.getGraphics(); - d = frame.size(); - - MediaTracker tracker = new MediaTracker(frame); - tracker.addImage(old_image, 0); - try { tracker.waitForID(0); } catch(InterruptedException excp) {} - g.drawImage(old_image, x, y, frame); - x += old_image.getWidth(frame) + 50; - - timer.start(); - image = ip.processImage(old_image, iff.createMeanImageFilter(), frame); - timer.stop(); - System.out.println(timer); - g.drawImage(image, x, y, frame); - x += old_image.getWidth(frame) + 50; - - timer.start(); - image = ip.processImage(old_image, iff.createSobelFilter(), frame); - timer.stop(); - System.out.println(timer); - g.drawImage(image, x, y, frame); - x = 50; - y += old_image.getHeight(frame) + 50; - - timer.start(); - image = ip.processImage(old_image, iff.createEmbossFilter(), frame); - timer.stop(); - System.out.println(timer); - g.drawImage(image, x, y, frame); - x += old_image.getWidth(frame) + 50; - - image = ip.processImage(old_image, iff.createSharpenFilter(), frame); - g.drawImage(image, x, y, frame); - x = 50; - y += old_image.getHeight(frame) + 50; - - image = ip.processImage(old_image, iff.createRotateImageFilter(), frame); - g.drawImage(image, x, y, frame); - } -} diff --git a/java/ImageProcessing/framework/GIFHandler.java b/java/ImageProcessing/framework/GIFHandler.java deleted file mode 100644 index 3d099ba294c..00000000000 --- a/java/ImageProcessing/framework/GIFHandler.java +++ /dev/null @@ -1,75 +0,0 @@ -package imaging.framework; - -import java.awt.*; -import java.io.*; -import JACE.OS.*; -import JACE.Connection.*; - - -public class GIFHandler extends BlobWriter -{ - public GIFHandler (String filename, Image image, int length) - { - super (null, length, 0, filename); - this.image_ = image; - } - - /****************************** - * Used for HTTP 1.1 PUT authorization - *****************************/ - public GIFHandler (String filename, Image image, int length, String authentication) - { - super (null, length, 0, filename, authentication); - this.image_ = image; - } - - protected int sendRequest () - { - if (this.sendHeader () == -1) - { - ACE.ERROR ("GIFHandler::sendHeader failed."); - return -1; - } - else - if (this.sendData () == -1) - { - ACE.ERROR ("GIFHandler::sendData failed."); - return -1; - } - return 0; - } - - // Send the data - protected int sendData () - { - - - try - { - if (this.length_ > 0) - { - OutputStream ostream = this.peer ().outputStream (); - - this.encoder_ = new GifEncoder (this.image_, ostream); - - this.encoder_.encode (); - - ostream.flush(); - - // this.encoder_ = new GIFEncoder (this.image_); - // this.encoder_.Write (ostream); - } - this.bytesWritten_ = this.length_; - - } - catch (IOException e) - { - ACE.ERROR ("Error writing to server"); - } - return 0; - } - - GifEncoder encoder_ = null; - // GIFEncoder encoder_ = null; - Image image_ = null; -} diff --git a/java/ImageProcessing/framework/GifEncoder.java b/java/ImageProcessing/framework/GifEncoder.java deleted file mode 100644 index 91a3927d95d..00000000000 --- a/java/ImageProcessing/framework/GifEncoder.java +++ /dev/null @@ -1,693 +0,0 @@ -// GifEncoder - write out an image as a GIF -// -// Transparency handling and variable bit size courtesy of Jack Palevich. -// -// Copyright (C) 1996 by Jef Poskanzer <jef@acme.com>. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -// SUCH DAMAGE. -// -// Visit the ACME Labs Java page for up-to-date versions of this and other -// fine Java utilities: http://www.acme.com/java/ - -package imaging.framework; - -import java.util.*; -import java.io.*; -import java.awt.Image; -import java.awt.image.*; - -/// Write out an image as a GIF. -// <P> -// <A HREF="/resources/classes/Acme/JPM/Encoders/GifEncoder.java">Fetch the software.</A><BR> -// <A HREF="/resources/classes/Acme.tar.Z">Fetch the entire Acme package.</A> -// <P> -// @see ToGif - -public class GifEncoder extends ImageEncoder - { - - private boolean interlace = false; - - /// Constructor from Image. - // @param img The image to encode. - // @param out The stream to write the GIF to. - public GifEncoder( Image img, OutputStream out ) throws IOException - { - super( img, out ); - } - - /// Constructor from Image with interlace setting. - // @param img The image to encode. - // @param out The stream to write the GIF to. - // @param interlace Whether to interlace. - public GifEncoder( Image img, OutputStream out, boolean interlace ) throws IOException - { - super( img, out ); - this.interlace = interlace; - } - - /// Constructor from ImageProducer. - // @param prod The ImageProducer to encode. - // @param out The stream to write the GIF to. - public GifEncoder( ImageProducer prod, OutputStream out ) throws IOException - { - super( prod, out ); - } - - /// Constructor from ImageProducer with interlace setting. - // @param prod The ImageProducer to encode. - // @param out The stream to write the GIF to. - public GifEncoder( ImageProducer prod, OutputStream out, boolean interlace ) throws IOException - { - super( prod, out ); - this.interlace = interlace; - } - - - int width, height; - int[][] rgbPixels; - - void encodeStart( int width, int height ) throws IOException - { - this.width = width; - this.height = height; - rgbPixels = new int[height][width]; - } - - void encodePixels( - int x, int y, int w, int h, int[] rgbPixels, int off, int scansize ) - throws IOException - { - // Save the pixels. - for ( int row = 0; row < h; ++row ) - System.arraycopy( - rgbPixels, row * scansize + off, - this.rgbPixels[y + row], x, w ); - - } - - IntHashtable colorHash; - - void encodeDone() throws IOException - { - int transparentIndex = -1; - int transparentRgb = -1; - // Put all the pixels into a hash table. - colorHash = new IntHashtable(); - int index = 0; - for ( int row = 0; row < height; ++row ) - { - int rowOffset = row * width; - for ( int col = 0; col < width; ++col ) - { - int rgb = rgbPixels[row][col]; - boolean isTransparent = ( ( rgb >>> 24 ) < 0x80 ); - if ( isTransparent ) - { - if ( transparentIndex < 0 ) - { - // First transparent color; remember it. - transparentIndex = index; - transparentRgb = rgb; - } - else if ( rgb != transparentRgb ) - { - // A second transparent color; replace it with - // the first one. - rgbPixels[row][col] = rgb = transparentRgb; - } - } - GifEncoderHashitem item = - (GifEncoderHashitem) colorHash.get( rgb ); - if ( item == null ) - { - if ( index >= 256 ) - throw new IOException( "too many colors for a GIF" ); - item = new GifEncoderHashitem( - rgb, 1, index, isTransparent ); - ++index; - colorHash.put( rgb, item ); - } - else - ++item.count; - } - } - - // Figure out how many bits to use. - int logColors; - if ( index <= 2 ) - logColors = 1; - else if ( index <= 4 ) - logColors = 2; - else if ( index <= 16 ) - logColors = 4; - else - logColors = 8; - - // Turn colors into colormap entries. - int mapSize = 1 << logColors; - byte[] reds = new byte[mapSize]; - byte[] grns = new byte[mapSize]; - byte[] blus = new byte[mapSize]; - for ( Enumeration e = colorHash.elements(); e.hasMoreElements(); ) - { - GifEncoderHashitem item = (GifEncoderHashitem) e.nextElement(); - reds[item.index] = (byte) ( ( item.rgb >> 16 ) & 0xff ); - grns[item.index] = (byte) ( ( item.rgb >> 8 ) & 0xff ); - blus[item.index] = (byte) ( item.rgb & 0xff ); - } - - GIFEncode( - out, width, height, interlace, (byte) 0, transparentIndex, - logColors, reds, grns, blus ); - } - - byte GetPixel( int x, int y ) throws IOException - { - GifEncoderHashitem item = - (GifEncoderHashitem) colorHash.get( rgbPixels[y][x] ); - if ( item == null ) - throw new IOException( "color not found" ); - return (byte) item.index; - } - - static void writeString( OutputStream out, String str ) throws IOException - { - int len = str.length(); - byte[] buf = new byte[len]; - str.getBytes( 0, len, buf, 0 ); - out.write( buf ); - } - - // Adapted from ppmtogif, which is based on GIFENCOD by David - // Rowley <mgardi@watdscu.waterloo.edu>. Lempel-Zim compression - // based on "compress". - - int Width, Height; - boolean Interlace; - int curx, cury; - int CountDown; - int Pass = 0; - - void GIFEncode( - OutputStream outs, int Width, int Height, boolean Interlace, byte Background, int Transparent, int BitsPerPixel, byte[] Red, byte[] Green, byte[] Blue ) - throws IOException - { - byte B; - int LeftOfs, TopOfs; - int ColorMapSize; - int InitCodeSize; - int i; - - this.Width = Width; - this.Height = Height; - this.Interlace = Interlace; - ColorMapSize = 1 << BitsPerPixel; - LeftOfs = TopOfs = 0; - - // Calculate number of bits we are expecting - CountDown = Width * Height; - - // Indicate which pass we are on (if interlace) - Pass = 0; - - // The initial code size - if ( BitsPerPixel <= 1 ) - InitCodeSize = 2; - else - InitCodeSize = BitsPerPixel; - - // Set up the current x and y position - curx = 0; - cury = 0; - - // Write the Magic header - writeString( outs, "GIF89a" ); - - // Write out the screen width and height - Putword( Width, outs ); - Putword( Height, outs ); - - // Indicate that there is a global colour map - B = (byte) 0x80; // Yes, there is a color map - // OR in the resolution - B |= (byte) ( ( 8 - 1 ) << 4 ); - // Not sorted - // OR in the Bits per Pixel - B |= (byte) ( ( BitsPerPixel - 1 ) ); - - // Write it out - Putbyte( B, outs ); - - // Write out the Background colour - Putbyte( Background, outs ); - - // Pixel aspect ratio - 1:1. - //Putbyte( (byte) 49, outs ); - // Java's GIF reader currently has a bug, if the aspect ratio byte is - // not zero it throws an ImageFormatException. It doesn't know that - // 49 means a 1:1 aspect ratio. Well, whatever, zero works with all - // the other decoders I've tried so it probably doesn't hurt. - Putbyte( (byte) 0, outs ); - - // Write out the Global Colour Map - for ( i = 0; i < ColorMapSize; ++i ) - { - Putbyte( Red[i], outs ); - Putbyte( Green[i], outs ); - Putbyte( Blue[i], outs ); - } - - // Write out extension for transparent colour index, if necessary. - if ( Transparent != -1 ) - { - Putbyte( (byte) '!', outs ); - Putbyte( (byte) 0xf9, outs ); - Putbyte( (byte) 4, outs ); - Putbyte( (byte) 1, outs ); - Putbyte( (byte) 0, outs ); - Putbyte( (byte) 0, outs ); - Putbyte( (byte) Transparent, outs ); - Putbyte( (byte) 0, outs ); - } - - // Write an Image separator - Putbyte( (byte) ',', outs ); - - // Write the Image header - Putword( LeftOfs, outs ); - Putword( TopOfs, outs ); - Putword( Width, outs ); - Putword( Height, outs ); - - // Write out whether or not the image is interlaced - if ( Interlace ) - Putbyte( (byte) 0x40, outs ); - else - Putbyte( (byte) 0x00, outs ); - - // Write out the initial code size - Putbyte( (byte) InitCodeSize, outs ); - - // Go and actually compress the data - compress( InitCodeSize+1, outs ); - - // Write out a Zero-length packet (to end the series) - Putbyte( (byte) 0, outs ); - - // Write the GIF file terminator - Putbyte( (byte) ';', outs ); - } - - // Bump the 'curx' and 'cury' to point to the next pixel - void BumpPixel() - { - // Bump the current X position - ++curx; - - // If we are at the end of a scan line, set curx back to the beginning - // If we are interlaced, bump the cury to the appropriate spot, - // otherwise, just increment it. - if ( curx == Width ) - { - curx = 0; - - if ( ! Interlace ) - ++cury; - else - { - switch( Pass ) - { - case 0: - cury += 8; - if ( cury >= Height ) - { - ++Pass; - cury = 4; - } - break; - - case 1: - cury += 8; - if ( cury >= Height ) - { - ++Pass; - cury = 2; - } - break; - - case 2: - cury += 4; - if ( cury >= Height ) - { - ++Pass; - cury = 1; - } - break; - - case 3: - cury += 2; - break; - } - } - } - } - - static final int EOF = -1; - - // Return the next pixel from the image - int GIFNextPixel() throws IOException - { - byte r; - - if ( CountDown == 0 ) - return EOF; - - --CountDown; - - r = GetPixel( curx, cury ); - - BumpPixel(); - - return r & 0xff; - } - - // Write out a word to the GIF file - void Putword( int w, OutputStream outs ) throws IOException - { - Putbyte( (byte) ( w & 0xff ), outs ); - Putbyte( (byte) ( ( w >> 8 ) & 0xff ), outs ); - } - - // Write out a byte to the GIF file - void Putbyte( byte b, OutputStream outs ) throws IOException - { - outs.write( b ); - } - - - // GIFCOMPR.C - GIF Image compression routines - // - // Lempel-Ziv compression based on 'compress'. GIF modifications by - // David Rowley (mgardi@watdcsu.waterloo.edu) - - // General DEFINEs - - static final int BITS = 12; - - static final int HSIZE = 5003; // 80% occupancy - - // GIF Image compression - modified 'compress' - // - // Based on: compress.c - File compression ala IEEE Computer, June 1984. - // - // By Authors: Spencer W. Thomas (decvax!harpo!utah-cs!utah-gr!thomas) - // Jim McKie (decvax!mcvax!jim) - // Steve Davies (decvax!vax135!petsd!peora!srd) - // Ken Turkowski (decvax!decwrl!turtlevax!ken) - // James A. Woods (decvax!ihnp4!ames!jaw) - // Joe Orost (decvax!vax135!petsd!joe) - - int n_bits; // number of bits/code - int maxbits = BITS; // user settable max # bits/code - int maxcode; // maximum code, given n_bits - int maxmaxcode = 1 << BITS; // should NEVER generate this code - - final int MAXCODE( int n_bits ) - { - return ( 1 << n_bits ) - 1; - } - - int[] htab = new int[HSIZE]; - int[] codetab = new int[HSIZE]; - - int hsize = HSIZE; // for dynamic table sizing - - int free_ent = 0; // first unused entry - - // block compression parameters -- after all codes are used up, - // and compression rate changes, start over. - boolean clear_flg = false; - - // Algorithm: use open addressing double hashing (no chaining) on the - // prefix code / next character combination. We do a variant of Knuth's - // algorithm D (vol. 3, sec. 6.4) along with G. Knott's relatively-prime - // secondary probe. Here, the modular division first probe is gives way - // to a faster exclusive-or manipulation. Also do block compression with - // an adaptive reset, whereby the code table is cleared when the compression - // ratio decreases, but after the table fills. The variable-length output - // codes are re-sized at this point, and a special CLEAR code is generated - // for the decompressor. Late addition: construct the table according to - // file size for noticeable speed improvement on small files. Please direct - // questions about this implementation to ames!jaw. - - int g_init_bits; - - int ClearCode; - int EOFCode; - - void compress( int init_bits, OutputStream outs ) throws IOException - { - int fcode; - int i /* = 0 */; - int c; - int ent; - int disp; - int hsize_reg; - int hshift; - - // Set up the globals: g_init_bits - initial number of bits - g_init_bits = init_bits; - - // Set up the necessary values - clear_flg = false; - n_bits = g_init_bits; - maxcode = MAXCODE( n_bits ); - - ClearCode = 1 << ( init_bits - 1 ); - EOFCode = ClearCode + 1; - free_ent = ClearCode + 2; - - char_init(); - - ent = GIFNextPixel(); - - hshift = 0; - for ( fcode = hsize; fcode < 65536; fcode *= 2 ) - ++hshift; - hshift = 8 - hshift; // set hash code range bound - - hsize_reg = hsize; - cl_hash( hsize_reg ); // clear hash table - - output( ClearCode, outs ); - - outer_loop: - while ( (c = GIFNextPixel()) != EOF ) - { - fcode = ( c << maxbits ) + ent; - i = ( c << hshift ) ^ ent; // xor hashing - - if ( htab[i] == fcode ) - { - ent = codetab[i]; - continue; - } - else if ( htab[i] >= 0 ) // non-empty slot - { - disp = hsize_reg - i; // secondary hash (after G. Knott) - if ( i == 0 ) - disp = 1; - do - { - if ( (i -= disp) < 0 ) - i += hsize_reg; - - if ( htab[i] == fcode ) - { - ent = codetab[i]; - continue outer_loop; - } - } - while ( htab[i] >= 0 ); - } - output( ent, outs ); - ent = c; - if ( free_ent < maxmaxcode ) - { - codetab[i] = free_ent++; // code -> hashtable - htab[i] = fcode; - } - else - cl_block( outs ); - } - // Put out the final code. - output( ent, outs ); - output( EOFCode, outs ); - } - - // output - // - // Output the given code. - // Inputs: - // code: A n_bits-bit integer. If == -1, then EOF. This assumes - // that n_bits =< wordsize - 1. - // Outputs: - // Outputs code to the file. - // Assumptions: - // Chars are 8 bits long. - // Algorithm: - // Maintain a BITS character long buffer (so that 8 codes will - // fit in it exactly). Use the VAX insv instruction to insert each - // code in turn. When the buffer fills up empty it and start over. - - int cur_accum = 0; - int cur_bits = 0; - - int masks[] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, - 0x001F, 0x003F, 0x007F, 0x00FF, - 0x01FF, 0x03FF, 0x07FF, 0x0FFF, - 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF }; - - void output( int code, OutputStream outs ) throws IOException - { - cur_accum &= masks[cur_bits]; - - if ( cur_bits > 0 ) - cur_accum |= ( code << cur_bits ); - else - cur_accum = code; - - cur_bits += n_bits; - - while ( cur_bits >= 8 ) - { - char_out( (byte) ( cur_accum & 0xff ), outs ); - cur_accum >>= 8; - cur_bits -= 8; - } - - // If the next entry is going to be too big for the code size, - // then increase it, if possible. - if ( free_ent > maxcode || clear_flg ) - { - if ( clear_flg ) - { - maxcode = MAXCODE(n_bits = g_init_bits); - clear_flg = false; - } - else - { - ++n_bits; - if ( n_bits == maxbits ) - maxcode = maxmaxcode; - else - maxcode = MAXCODE(n_bits); - } - } - - if ( code == EOFCode ) - { - // At EOF, write the rest of the buffer. - while ( cur_bits > 0 ) - { - char_out( (byte) ( cur_accum & 0xff ), outs ); - cur_accum >>= 8; - cur_bits -= 8; - } - - flush_char( outs ); - } - } - - // Clear out the hash table - - // table clear for block compress - void cl_block( OutputStream outs ) throws IOException - { - cl_hash( hsize ); - free_ent = ClearCode + 2; - clear_flg = true; - - output( ClearCode, outs ); - } - - // reset code table - void cl_hash( int hsize ) - { - for ( int i = 0; i < hsize; ++i ) - htab[i] = -1; - } - - // GIF Specific routines - - // Number of characters so far in this 'packet' - int a_count; - - // Set up the 'byte output' routine - void char_init() - { - a_count = 0; - } - - // Define the storage for the packet accumulator - byte[] accum = new byte[256]; - - // Add a character to the end of the current packet, and if it is 254 - // characters, flush the packet to disk. - void char_out( byte c, OutputStream outs ) throws IOException - { - accum[a_count++] = c; - if ( a_count >= 254 ) - flush_char( outs ); - } - - // Flush the packet to disk, and reset the accumulator - void flush_char( OutputStream outs ) throws IOException - { - if ( a_count > 0 ) - { - outs.write( a_count ); - outs.write( accum, 0, a_count ); - a_count = 0; - } - } - - } - -class GifEncoderHashitem - { - - public int rgb; - public int count; - public int index; - public boolean isTransparent; - - public GifEncoderHashitem( int rgb, int count, int index, boolean isTransparent ) - { - this.rgb = rgb; - this.count = count; - this.index = index; - this.isTransparent = isTransparent; - } - - } diff --git a/java/ImageProcessing/framework/Hierarchy.java b/java/ImageProcessing/framework/Hierarchy.java deleted file mode 100644 index 41b1825ef4d..00000000000 --- a/java/ImageProcessing/framework/Hierarchy.java +++ /dev/null @@ -1,347 +0,0 @@ -package imaging.framework; - -import java.awt.*; -import java.util.Vector; - -public class Hierarchy extends Canvas -{ - // Attributes - private String name_; - private Hierarchy root_; - private Hierarchy parent_; - private Icon icon_ = null; - - // State - private boolean collapsed_ = true; - private boolean deadend_ = true; - private Vector contained_ = new Vector(); - private Rectangle self_; - private Rectangle scope_; - - // Constants - private Color COLOR = Color.black; - private Font FONT = new Font("Dialog", Font.BOLD, 12); - private static int TRI_HEIGHT = 8; - private int SPACE = 15; - - static Hierarchy last_lit_ = null; - - public Hierarchy(String name, boolean root) - { - name_ = name; - - if (root) - { - deadend_ = false; - root_ = this; - parent_ = null; - } - } - - public Hierarchy(String name, Icon icon, boolean root) - { - this(name, root); - icon_ = icon; - } - - public Hierarchy(String name) - { - this(name, false); - } - - public Hierarchy(String name, Icon icon) - { - this(name, icon, false); - } - - public void setExpandable(boolean expandable) - { - deadend_ = ! expandable; - - /* - if (root_ != null) - root_.repaint(); - */ - } - - public void setCollapsed(boolean collapsed) - { - collapsed_ = collapsed; - - if (root_ != null) - root_.repaint(); - } - - public void addEntry(Hierarchy entry) - { - deadend_ = false; - entry.parent_ = this; - entry.root_ = root_; - entry.FONT = FONT; - entry.COLOR = COLOR; - entry.SPACE = SPACE; - - contained_.addElement(entry); - } - - public boolean removeEntry(String name) - { - if (contained_.size() == 1) - deadend_ = true; - - return contained_.removeElement(name); - } - - public String getName() - { - return name_; - } - - public void setName(String name) - { - name_ = name; - } - - public Hierarchy getHierarchyParent() - { - return parent_; - } - - public void setFont(Font font) - { - FONT = font; - } - - public void setColor(Color color) - { - COLOR = color; - } - - public void setSpace(int space) - { - SPACE = space; - } - - public void handleEvent() {} - - public boolean mouseDown(Event evt, int x, int y) - { - Hierarchy value = mouseInside(x, y); - - if (value != null) - { - if (! value.deadend_) - { - if (x < value.self_.x + TRI_HEIGHT + SPACE) - { - value.collapsed_ = ! value.collapsed_; - if (value.contained_.isEmpty()) - value.handleEvent(); - repaint(); - } - } - else - { - if (value.contained_.isEmpty()) - value.handleEvent(); - } - } - - return false; - } - - public boolean mouseMove(Event evt, int x, int y) - { - Hierarchy value = mouseInside(x, y); - - if ((value != last_lit_) && (last_lit_ != null)) - last_lit_.highlight(getGraphics(), false); - - if (value != null && value.deadend_) - value.highlight(getGraphics(), true); - - last_lit_ = value; - - return false; - } - - public void paint(Graphics g) - { - Dimension d = size(); - - drawLevel(g, SPACE, SPACE); - - if (d.width < scope_.width || d.height < scope_.height || - d.width > scope_.width || d.height > scope_.height) - resize(scope_.width, scope_.height); - } - - - private Point drawLevel(Graphics g, int x, int y) - { - g.setFont(FONT); - FontMetrics font_metrics = g.getFontMetrics(); - int string_height = font_metrics.getHeight(); - int string_width = font_metrics.stringWidth(name_); - int entry_height = string_height; - int entry_width = string_width + 2*SPACE + TRI_HEIGHT; - int total_height, total_width, initial_x = x, initial_y = y; - int indent = SPACE + TRI_HEIGHT/2; - int temp_x = x; - Point place_marker; - Hierarchy entry; - - if (icon_ != null) - { - entry_height = Math.max(string_height, icon_.iconSize().height); - entry_width += icon_.iconSize().width + SPACE; - indent += icon_.iconSize().width/2; - if (! deadend_) - drawShape(g, x, y + (entry_height - TRI_HEIGHT)/2, deadend_, collapsed_); - } - else - drawShape(g, x, y + (entry_height - TRI_HEIGHT)/2, deadend_, collapsed_); - - self_ = new Rectangle(initial_x, initial_y, entry_width, entry_height); - - temp_x += TRI_HEIGHT + SPACE; - - if (icon_ != null) - { - icon_.drawIcon(g, temp_x, y, root_); - temp_x += SPACE + icon_.iconSize().width; - } - - g.setColor(COLOR); - - g.drawString(name_, temp_x, y + (entry_height + string_height)/2); - - total_width = entry_width; - y += entry_height + SPACE; - - if (! (deadend_ || collapsed_)) - { - x += indent; - for (int i = 0; i < contained_.size(); i++) - { - entry = (Hierarchy)contained_.elementAt(i); - place_marker = entry.drawLevel(g, x, y); - total_width = Math.max(total_width, entry.scope_.width + indent + SPACE); - x = place_marker.x; - y = place_marker.y; - } - x -= indent; - } - - total_height = y - initial_y; - scope_ = new Rectangle(initial_x, initial_y, total_width, total_height); - - return new Point(x, y); - } - - private Hierarchy mouseInside(int x, int y) - { - Hierarchy entry; - Hierarchy return_value = null; - - if (self_.inside(x, y)) - { - return_value = this; - } - else - { - if (scope_.inside(x, y) && (! collapsed_)) - { - for (int i = 0; i < contained_.size(); i++) - { - entry = (Hierarchy)contained_.elementAt(i); - if ((return_value = entry.mouseInside(x, y)) != null) - break; - } - } - else - return_value = null; - } - - return return_value; - } - - private void highlight(Graphics g, boolean lit) - { - g.setFont(FONT); - FontMetrics fm = g.getFontMetrics(); - int string_height = fm.getHeight(); - int x = self_.x + SPACE + TRI_HEIGHT; - int y = self_.y; - - if (icon_ != null) - x += icon_.iconSize().width + SPACE; - - if (lit) - g.setColor(Color.magenta); - else - g.setColor(COLOR); - - g.drawString(name_, x, y + (self_.height + string_height)/2); - } - - - private static void drawShape(Graphics g, int x, int y, boolean dead_end, boolean collapsed) - { - int xpoints[] = new int[3]; - int ypoints[] = new int[3]; - - xpoints[0] = x; - ypoints[0] = y; - - if (dead_end) - { - g.fillOval(x, y, TRI_HEIGHT, TRI_HEIGHT); - } - else - { - // Draw a small collapsed triangle: |> - if (collapsed) - { - xpoints[1] = x; - xpoints[2] = x + TRI_HEIGHT; - ypoints[1] = y + TRI_HEIGHT; - ypoints[2] = y + TRI_HEIGHT/2; - g.fillPolygon(xpoints, ypoints, 3); - } - //Draw a small uncollapsed triangle - else - { - xpoints[1] = x + TRI_HEIGHT; - xpoints[2] = x + TRI_HEIGHT/2; - ypoints[1] = y; - ypoints[2] = y + TRI_HEIGHT; - g.fillPolygon(xpoints, ypoints, 3); - } - } - } - - private static void drawVertHashedLine(Graphics g, int x, int y1, int y2, int hashsize) - { - for (int ytemp = y1; ytemp < y2; ytemp += hashsize*3) - { - if (y2 - hashsize < ytemp) - g.drawLine(x, ytemp, x, y2); - else - g.drawLine(x, ytemp, x, ytemp + hashsize); - } - } - - private static void drawHoroHashedLine(Graphics g, int y, int x1, int x2, Color color, int hashsize) - { - for (int xtemp = x1; xtemp < x2; xtemp += hashsize*3) - { - if (x2 - hashsize < xtemp) - g.drawLine(xtemp, y, x1, y); - else - g.drawLine(xtemp, y, xtemp + hashsize, y); - } - } -} - - diff --git a/java/ImageProcessing/framework/HierarchyAdapter.java b/java/ImageProcessing/framework/HierarchyAdapter.java deleted file mode 100644 index a265be656ea..00000000000 --- a/java/ImageProcessing/framework/HierarchyAdapter.java +++ /dev/null @@ -1,34 +0,0 @@ -package imaging.framework; - -import java.awt.*; - -class HierarchyAdapter extends Hierarchy -{ - public HierarchyAdapter(String name, boolean root) - { - super(name, root); - } - - public HierarchyAdapter(String name, Icon icon, boolean root) - { - super(name, icon, root); - } - - public HierarchyAdapter(String name) - { - super(name); - } - - public HierarchyAdapter(String name, Icon icon) - { - super(name, icon); - } - - public void paint(Graphics g) - { - super.paint(g); - - Container p = getParent().getParent(); - p.getLayout ().layoutContainer (p); - } -} diff --git a/java/ImageProcessing/framework/Icon.java b/java/ImageProcessing/framework/Icon.java deleted file mode 100644 index eed91ed55c7..00000000000 --- a/java/ImageProcessing/framework/Icon.java +++ /dev/null @@ -1,70 +0,0 @@ -package imaging.framework; - -import java.awt.*; -import java.applet.*; -import java.net.*; - -public class Icon -{ - protected Image icon_; - protected Dimension iconSize_; - - Icon() - { - super(); - } - - Icon(String file_name, Component comp) - { - this.icon_ = Toolkit.getDefaultToolkit().getImage(file_name); - this.loadImage(comp); - } - - Icon(Image icon_image, Component comp) - { - this.icon_ = icon_image; - this.loadImage(comp); - } - - Icon(String url, Applet applet) throws MalformedURLException - { - this.icon_ = applet.getImage(new URL(url)); - loadImage(applet); - } - - public void drawIcon(Graphics g, int x, int y, Component comp) - { - g.drawImage(this.icon_, x, y, comp); - } - - private void loadImage(Component comp) - { - try - { - MediaTracker tracker = new MediaTracker(comp); - tracker.addImage(this.icon_, 0); - tracker.waitForID(0); - - this.iconSize_ = new Dimension(this.icon_.getWidth(comp), this.icon_.getHeight(comp)); - } - catch (InterruptedException excp) - { - System.err.println("Icon::getIcon image failed to load"); - } - } - - public Dimension iconSize() - { - return this.iconSize_; - } - - public Image getIconImage() - { - return this.icon_; - } - -} - - - - diff --git a/java/ImageProcessing/framework/ImageApp.java b/java/ImageProcessing/framework/ImageApp.java deleted file mode 100644 index 486f45b9afb..00000000000 --- a/java/ImageProcessing/framework/ImageApp.java +++ /dev/null @@ -1,303 +0,0 @@ -package imaging.framework; - -import java.util.*; -import java.awt.*; -import java.net.*; -import java.io.*; -import java.awt.image.*; -import java.applet.*; -import gjt.Separator; -import gjt.Util; - -public class ImageApp extends Applet -{ - public void init () - { - // Use BorderLayout for our applet frame - this.setLayout (new BorderLayout ()); - - // Now load all the filters specified in the config file - // this.loadFilters (); - this.setupButtonPanel (); - this.add ("Center", this.imageCanvas_); - // Check if we are running in test mode - String testFile = getParameter ("testFile"); - if (testFile != null) - { - this.tester_ = new Tester (testFile, this); - this.tester_.initialize (); - } - // Initialize the DialogManager - DialogManager.initialize (this); - } - - private void setupButtonPanel () - { - Panel southPanel = new Panel (); - southPanel.setLayout (new BorderLayout ()); - - Panel buttonPanel = new Panel (); - buttonPanel.setLayout (new GridLayout (1, 5)); - - this.statusDisplay_ = new StatusDisplay (); - // Create a panel for all the buttons - this.filePanel_ = new FilePanel (this); - this.resetPanel_ = new ResetPanel (this); - this.zoomPanel_ = new ZoomPanel (this); - this.filterPanel_ = new FilterPanel (this); - this.helpPanel_ = new HelpPanel (this); - - buttonPanel.add (this.filePanel_); - buttonPanel.add (this.resetPanel_); - buttonPanel.add (this.zoomPanel_); - buttonPanel.add (this.filterPanel_); - buttonPanel.add (this.helpPanel_); - - southPanel.add ("North", new Separator ()); - southPanel.add ("Center", buttonPanel); - southPanel.add ("South", this.statusDisplay_); - - southPanel.resize (400, 400); - - // Now add all these components to the main frame - this.add ("South", southPanel); - this.add ("North", new Panel ()); // Empty panel (for aesthetics) - // this.add ("East", new Panel ()); // Empty panel (for aesthetics) - // this.add ("West", new Panel ()); // Empty panel (for aesthetics) - } - - public void displayStatus (String s) - { - this.statusDisplay_.setText (s); - } - - // Handle all action events - public void zoomFactor (double zoomFactor) - { - this.imageCanvas_.zoomFactor (zoomFactor); - } - - public void reloadFilters () - { - this.filterPanel_.loadFilters (); - repaint (); - } - - public Hashtable filterTable () - { - return this.filterTable_; - } - - public ImageFilter getFilter (String s) - { - return (ImageFilter) this.filterTable_.get (s); - } - - public void apply () - { - ImageFilter filter = this.getFilter (this.filterPanel_.choice ().getSelectedItem ()); - this.apply (filter); - } - - public void apply (ImageFilter filter) - { - if (filter != null) - { - Util.getFrame (this).setCursor (Frame.WAIT_CURSOR); - this.imageCanvas_.applyFilter (filter); - Util.getFrame (this).setCursor (Frame.DEFAULT_CURSOR); - } - } - - public void resetImage () - { - this.imageCanvas_.applyFilter (null); - } - - public int openURL (String url) - { - if (url == null) - return -1; - - Image image = null; - try - { - System.out.println("Getting image"); - image = getImage (new URL (url)); - System.out.println("Done"); - } - catch (MalformedURLException e) - { - return -1; - } - - if (image != null) - { - // Check if the image was actually loaded. Note that we have - // to wait for the potential image to finish loading before we - // know if it is a valid image. - if (this.imageCanvas_.setImage (image) == -1) - return -1; - else - this.filePanel_.enableSaveButton (); - } - else - return -1; - return 0; - } - - // maintain compatibility - public void saveFile (String url) - { - this.saveFile (url, null); - } - - public void saveFile (String url, String authentication) - { - ImageSender imageSender = new ImageSender (this); - imageSender.open (this.imageCanvas_.getImage (), url); - int bytesSent = imageSender.send (authentication); - if (bytesSent == -1) - DialogManager.popDialog (DialogType.NOT_SUPPORTED, - "Server does not support uploading or URL not found"); - } - - public Choice getFilters () - { - Choice choice = new Choice (); - - // Add the default choice first - choice.addItem ("Filters:"); - - // Now do the file processing -- to determine which filters need - // to be loaded. - - // Check if the filename has been previously specified and - // if not then check if the user has specified the name of the - // config file - if (this.configFile_ == null) - this.configFile_ = getParameter ("configFile"); - - /* - if (this.configFile_ == null) - this.configFile_ = "http://www.cs.wustl.edu/~pjain/java/ACE_wrappers/java/ImageProcessing/framework/filter.conf"; - */ - - if (this.configFile_ == null) - this.configFile_ = this.getCodeBase().toString() + "../ImageProcessing/framework/filter.conf"; - - String configInfo = null; - - // Only get the file as a URL if it was specified as an http style parameter! - if ((this.configFile_ != null) && ((this.configFile_.startsWith("http://")) || - (this.configFile_.startsWith("file://")) || - (this.configFile_.startsWith("ftp://")))) { - - URL url; - - try - { - System.out.println ("Configuration File: " + this.configFile_); - // Create a new URL - url = new URL (this.configFile_); - - // Get the input stream and pipe it to a DataInputStream - DataInputStream iStream = new DataInputStream (url.openStream ()); - - // Create a buffer to hold all the data we get - StringBuffer tempBuf = new StringBuffer (); - // Keep reading the data until we are done - String tempString = iStream.readLine (); - while (tempString != null) - { - tempBuf.append (tempString); - tempBuf.append (" "); - tempString = iStream.readLine (); - } - configInfo = tempBuf.toString (); - } - catch (MalformedURLException e) - { - System.err.println (e); - } - catch (IOException e) - { - System.err.println (e); - } - } - - if (configInfo != null) - { - try - { - StringTokenizer tokens = new StringTokenizer (configInfo); - String fullFilterName = null; - String filterName = null; - // Now parse the string, picking up filter names. Use these - // names to load the actual filters as well add new choices to - // the filter choices. - while (tokens.hasMoreTokens ()) - { - // Get the next token - fullFilterName = tokens.nextToken (); - filterName = this.extractFilterName (fullFilterName); - - System.out.println ("Loading: " + fullFilterName); - // Load the filter class - Class c = Class.forName (fullFilterName); - // Class c = this.filterRepository_.load (filter); - - // Add the filter to the Filter Repository - this.filterTable_.put (filterName, - (ImageFilter) c.newInstance ()); - - // Add filter name to the list of filter choices - choice.addItem (filterName); - } - } - catch (ClassNotFoundException e) - { - System.err.println ("Filter not found: " + e); - return null; - } - catch (IllegalAccessException e) - { - System.err.println ("Filter not found: " + e); - return null; - } - catch (InstantiationException e) - { - System.err.println ("Filter not found: " + e); - return null; - } - } - return choice; - } - - // Extract the short filter name from the full filter name. For - // example, this method returns "EmbossFilter" if it is given the - // string "imaging/filters/EmbossFilter" - private String extractFilterName (String s) - { - String filterName = null; - StringTokenizer tokens = new StringTokenizer (s, "."); - while (tokens.hasMoreTokens ()) - filterName = tokens.nextToken (); - return filterName; - } - - private Panel centerPanel_ = new Panel (); - private String configFile_ = null; - private Choice choice_ = null; - private ImageCanvas imageCanvas_ = new ImageCanvas (); - private FilePanel filePanel_; - private ResetPanel resetPanel_; - private ZoomPanel zoomPanel_; - private FilterPanel filterPanel_; - private HelpPanel helpPanel_; - - private StatusDisplay statusDisplay_; - private Hashtable filterTable_ = new Hashtable (); - private Tester tester_; - -} diff --git a/java/ImageProcessing/framework/ImageByteCounter.java b/java/ImageProcessing/framework/ImageByteCounter.java deleted file mode 100644 index c907c9f1c92..00000000000 --- a/java/ImageProcessing/framework/ImageByteCounter.java +++ /dev/null @@ -1,94 +0,0 @@ -package imaging.framework; - -import java.io.*; -import java.awt.*; -import java.applet.*; -import java.net.*; -import JACE.OS.*; - -public class ImageByteCounter -{ - public ImageByteCounter (String title, Image image, Applet parent) - { - this.image_ = image; - this.parent_ = parent; - - Image im = null; - try - { - im = this.parent_.getImage (new URL (this.parent_.getCodeBase () + - "../ImageProcessing/framework/" + - "10.gif")); - } - catch (MalformedURLException e) - { - ACE.ERROR (e); - } - - indicator_ = new StatusIndicator ("", im); - } - - public int count () - { - int length = 0; - try - { - GIFOutputStream ostream = new GIFOutputStream (indicator_); - // GIFOutputStream ostream = new GIFOutputStream (null); - GifEncoder encoder = new GifEncoder (this.image_, ostream); - encoder.encode (); - - length = ostream.count (); - System.out.println ("send: " + length); - } - catch (IOException e) - { - ACE.ERROR ("Exception generating gif"); - } - indicator_.dispose (); - return length; - } - - Image image_ = null; - StatusIndicator indicator_ = null; - boolean done_ = false; - Applet parent_; -} - -class GIFOutputStream extends OutputStream -{ - public GIFOutputStream (StatusIndicator indicator) - { - super (); - this.indicator_ = indicator; - } - - public synchronized void write (int b) throws IOException - { - bytesWritten_++; - if (this.indicator_ != null) - this.indicator_.update (bytesWritten_); - } - - public synchronized void write (byte buf[]) throws IOException - { - bytesWritten_ += buf.length; - if (this.indicator_ != null) - this.indicator_.update (bytesWritten_); - } - - public synchronized void write (byte buf[], int offset, int length) throws IOException - { - bytesWritten_ += length; - if (this.indicator_ != null) - this.indicator_.update (bytesWritten_); - } - - public int count () - { - return this.bytesWritten_; - } - - private int bytesWritten_ = 0; - private StatusIndicator indicator_ = null; -} diff --git a/java/ImageProcessing/framework/ImageCanvas.java b/java/ImageProcessing/framework/ImageCanvas.java deleted file mode 100644 index 182bd54bf9b..00000000000 --- a/java/ImageProcessing/framework/ImageCanvas.java +++ /dev/null @@ -1,166 +0,0 @@ -package imaging.framework; - -import java.awt.*; -import java.awt.image.*; -import gjt.Util; -import JACE.OS.*; - -class ImageCanvas extends Canvas -{ - public static final double MAX_ZOOM = 4.0; - public static final double MIN_ZOOM = 0.5; - - public int setImage (Image image) - { - int flags = 0; - if (image != null) - { - // Load the image - this.tracker_.addImage(image, 0); - try { this.tracker_.waitForID(0); } catch(InterruptedException excp) {} - - // Check if the image was actually loaded. Note that we have - // to wait for the potential image to finish loading before we - // know if it is a valid image. - flags = this.checkImage (image, this); - if (ACE.BIT_ENABLED (flags, ImageObserver.ERROR)) - return -1; - - // If we reached here, it means image was loaded successfully so cache it - this.image_ = image; - this.originalImage_ = this.image_; - - this.x_ = (this.size ().width - this.image_.getWidth (this))/2; - this.y_ = (this.size ().height - this.image_.getHeight (this))/2; - this.original_x_ = this.x_; - this.original_y_ = this.y_; - repaint (); - } - return 0; - } - - public Image getImage () - { - return this.image_; - } - - public void paint (Graphics g) - { - this.setBackground (Color.white); - if (this.image_ != null) - g.drawImage(this.image_, - this.x_, this.y_, - (int) (this.image_.getWidth (this) * this.zoom_), - (int) (this.image_.getHeight (this) * this.zoom_), - this); - } - - public void applyFilter (ImageFilter filter) - { - if (this.image_ != null) - { - Image temp; - if (filter == null) - { - temp = this.originalImage_; - this.x_ = this.original_x_; - this.y_ = this.original_y_; - this.zoom_ = 1.0; - } - else - temp = this.ip_.processImage(this.image_, filter, this); - - this.tracker_.addImage(temp, 0); - try { this.tracker_.waitForID(0); } catch(InterruptedException excp) {} - - this.image_ = temp; - - // Originally I needed to flush the pixel data for the image to be - // drawn properly. When running the applet in appletviewer, the - // image used to jump around, but running in a browser seems to be - // ok. - //this.image_.flush(); - repaint (); - } - } - - public void zoomFactor (double zoom) - { - this.zoom_ *= zoom; - if (this.zoom_ > ImageCanvas.MAX_ZOOM) - this.zoom_ = ImageCanvas.MAX_ZOOM; - else if (this.zoom_ < ImageCanvas.MIN_ZOOM) - this.zoom_ = ImageCanvas.MIN_ZOOM; - - repaint (); - } - - public boolean mouseDown (Event evt, int x, int y) - { - if (inBounds (x, y)) - { - this.selected_ = true; - this.last_x_ = x; - this.last_y_ = y; - } - return true; - } - - public boolean mouseUp (Event evt, int x, int y) - { - this.selected_ = false; - return true; - } - - public boolean mouseDrag (Event evt, int x, int y) - { - if (this.selected_) - { - this.x_ = x - (this.last_x_ - this.x_); - this.y_ = y - (this.last_y_ - this.y_); - this.last_x_ = x; - this.last_y_ = y; - repaint (); - } - return true; - } - - public boolean mouseMove (Event evt, int x, int y) - { - if (this.image_ != null && inBounds (x, y)) - Util.getFrame (this).setCursor (Frame.HAND_CURSOR); - else - Util.getFrame (this).setCursor (Frame.DEFAULT_CURSOR); - return true; - } - - public boolean mouseExit (Event evt, int x, int y) - { - Util.getFrame (this).setCursor (Frame.DEFAULT_CURSOR); - return true; - } - - // Check if mouse is within the bounds of the image - private boolean inBounds (int x, int y) - { - if (this.image_ == null) - return false; - else - return (x >= this.x_) && - (y >= this.y_) && - (x <= (this.x_ + this.zoom_ * this.image_.getWidth (this))) && - (y <= (this.y_ + this.zoom_ * this.image_.getHeight (this))); - } - - private MediaTracker tracker_ = new MediaTracker(this); - private Image image_, originalImage_; - private int x_ = 0, y_ = 0; - private int original_x_ = 0, original_y_ = 0; - private int width_ = 0, height_ = 0; - private ImageProcessor ip_ = new ImageProcessor (); - private boolean selected_ = false; - private int last_x_ = 0, last_y_ = 0; - private double zoom_ = 1.0; - -} - diff --git a/java/ImageProcessing/framework/ImageEncoder.java b/java/ImageProcessing/framework/ImageEncoder.java deleted file mode 100644 index a0aac0d559f..00000000000 --- a/java/ImageProcessing/framework/ImageEncoder.java +++ /dev/null @@ -1,271 +0,0 @@ -// ImageEncoder - abstract class for writing out an image -// -// Copyright (C) 1996 by Jef Poskanzer <jef@acme.com>. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -// SUCH DAMAGE. -// -// Visit the ACME Labs Java page for up-to-date versions of this and other -// fine Java utilities: http://www.acme.com/java/ - -package imaging.framework; - -import java.util.*; -import java.io.*; -import java.awt.Image; -import java.awt.image.*; - -/// Abstract class for writing out an image. -// <P> -// A framework for classes that encode and write out an image in -// a particular file format. -// <P> -// This provides a simplified rendition of the ImageConsumer interface. -// It always delivers the pixels as ints in the RGBdefault color model. -// It always provides them in top-down left-right order. -// If you want more flexibility you can always implement ImageConsumer -// directly. -// <P> -// <A HREF="/resources/classes/Acme/JPM/Encoders/ImageEncoder.java">Fetch the software.</A><BR> -// <A HREF="/resources/classes/Acme.tar.Z">Fetch the entire Acme package.</A> -// <P> -// @see GifEncoder -// @see PpmEncoder -// @see Acme.JPM.Decoders.ImageDecoder - -public abstract class ImageEncoder implements ImageConsumer - { - - protected OutputStream out; - - private ImageProducer producer; - private int width = -1; - private int height = -1; - private int hintflags = 0; - private boolean started = false; - private boolean encoding; - private IOException iox; - private static final ColorModel rgbModel = ColorModel.getRGBdefault(); - private Hashtable props = null; - - /// Constructor. - // @param img The image to encode. - // @param out The stream to write the bytes to. - public ImageEncoder( Image img, OutputStream out ) throws IOException - { - this( img.getSource(), out ); - } - - /// Constructor. - // @param producer The ImageProducer to encode. - // @param out The stream to write the bytes to. - public ImageEncoder( ImageProducer producer, OutputStream out ) throws IOException - { - this.producer = producer; - this.out = out; - } - - - // Methods that subclasses implement. - - /// Subclasses implement this to initialize an encoding. - abstract void encodeStart( int w, int h ) throws IOException; - - /// Subclasses implement this to actually write out some bits. They - // are guaranteed to be delivered in top-down-left-right order. - // One int per pixel, index is row * scansize + off + col, - // RGBdefault (AARRGGBB) color model. - abstract void encodePixels( - int x, int y, int w, int h, int[] rgbPixels, int off, int scansize ) - throws IOException; - - /// Subclasses implement this to finish an encoding. - abstract void encodeDone() throws IOException; - - - // Our own methods. - - /// Call this after initialization to get things going. - public synchronized void encode() throws IOException - { - encoding = true; - iox = null; - producer.startProduction( this ); - while ( encoding ) - try - { - wait(); - } - catch ( InterruptedException e ) {} - if ( iox != null ) - throw iox; - } - - private boolean accumulate = false; - private int[] accumulator; - - private void encodePixelsWrapper( - int x, int y, int w, int h, int[] rgbPixels, int off, int scansize ) - throws IOException - { - if ( ! started ) - { - started = true; - encodeStart( width, height ); - if ( ( hintflags & TOPDOWNLEFTRIGHT ) == 0 ) - { - accumulate = true; - accumulator = new int[width * height]; - } - } - if ( accumulate ) - for ( int row = 0; row < h; ++row ) - System.arraycopy( - rgbPixels, row * scansize + off, - accumulator, ( y + row ) * width + x, - w ); - else - encodePixels( x, y, w, h, rgbPixels, off, scansize ); - } - - private void encodeFinish() throws IOException - { - if ( accumulate ) - { - encodePixels( 0, 0, width, height, accumulator, 0, width ); - accumulator = null; - accumulate = false; - } - } - - private synchronized void stop() - { - encoding = false; - notifyAll(); - } - - - // Methods from ImageConsumer. - - public void setDimensions( int width, int height ) - { - this.width = width; - this.height = height; - } - - public void setProperties( Hashtable props ) - { - this.props = props; - } - - public void setColorModel( ColorModel model ) - { - // Ignore. - } - - public void setHints( int hintflags ) - { - this.hintflags = hintflags; - } - - public void setPixels( - int x, int y, int w, int h, ColorModel model, byte[] pixels, - int off, int scansize ) - { - int[] rgbPixels = new int[w]; - for ( int row = 0; row < h; ++row ) - { - int rowOff = off + row * scansize; - for ( int col = 0; col < w; ++col ) - rgbPixels[col] = model.getRGB( pixels[rowOff + col] & 0xff ); - try - { - encodePixelsWrapper( x, y + row, w, 1, rgbPixels, 0, w ); - } - catch ( IOException e ) - { - iox = e; - stop(); - return; - } - } - } - - public void setPixels( - int x, int y, int w, int h, ColorModel model, int[] pixels, - int off, int scansize ) - { - if ( model == rgbModel ) - { - try - { - encodePixelsWrapper( x, y, w, h, pixels, off, scansize ); - } - catch ( IOException e ) - { - iox = e; - stop(); - return; - } - } - else - { - int[] rgbPixels = new int[w]; - for ( int row = 0; row < h; ++row ) - { - int rowOff = off + row * scansize; - for ( int col = 0; col < w; ++col ) - rgbPixels[col] = model.getRGB( pixels[rowOff + col] ); - try - { - encodePixelsWrapper( x, y + row, w, 1, rgbPixels, 0, w ); - } - catch ( IOException e ) - { - iox = e; - stop(); - return; - } - } - } - } - - public void imageComplete( int status ) - { - producer.removeConsumer( this ); - if ( status == ImageConsumer.IMAGEABORTED ) - iox = new IOException( "image aborted" ); - else - { - try - { - encodeFinish(); - encodeDone(); - } - catch ( IOException e ) - { - iox = e; - } - } - stop(); - } - - } diff --git a/java/ImageProcessing/framework/ImageProcessor.java b/java/ImageProcessing/framework/ImageProcessor.java deleted file mode 100644 index 422298d508f..00000000000 --- a/java/ImageProcessing/framework/ImageProcessor.java +++ /dev/null @@ -1,111 +0,0 @@ -package imaging.framework; - -import java.awt.*; -import java.awt.image.*; -import java.util.Vector; - -public class ImageProcessor -{ - private Vector pipeline_ = new Vector(); - - - public ImageProcessor() - { - } - - public void addFilter(String filter_name, ImageFilter filter) - { - pipeline_.addElement(new FilterNode(filter_name, filter)); - } - - public boolean removeFilter(String name) - { - FilterNode filter_node; - - for (int i = 0; i < pipeline_.size(); i++) - { - filter_node = (FilterNode)pipeline_.elementAt(i); - if (name.equals(filter_node.getName())) - { - pipeline_.removeElementAt(i); - pipeline_.trimToSize(); - return true; - } - } - - return false; - } - - public Image processImage(Image image, ImageFilter filter, Component component) - { - Image old_image = image, new_image = old_image; - MediaTracker tracker = new MediaTracker(component); - - try - { - new_image = component.createImage(new FilteredImageSource(old_image.getSource(), filter)); - tracker.addImage(new_image, 0); - tracker.waitForID(0); - } - catch(InterruptedException excp) - { - System.out.println("ImageProcessor::processImage Image failed to load."); - System.out.println(excp); - return null; - } - - return new_image; - } - - public Image processImage(Image image, Component component) - { - Image old_image = image, new_image = null; - ImageFilter image_filter; - FilterNode filter_node; - MediaTracker tracker = new MediaTracker(component); - - try - { - for (int i = 0; i < pipeline_.size(); i++) - { - filter_node = (FilterNode) pipeline_.elementAt(i); - image_filter = filter_node.getFilter(); - new_image = component.createImage(new FilteredImageSource(old_image.getSource(), image_filter)); - old_image = new_image; - tracker.addImage(new_image, 0); - tracker.waitForID(0); - } - } - catch(InterruptedException excp) - { - System.out.println("ImageProcessor::processImage Image failed to load."); - System.out.println(excp); - return null; - } - - return new_image; - } -} - - -class FilterNode -{ - private String name_; - private ImageFilter filter_; - - FilterNode(String name, ImageFilter filter) - { - name_ = name; - filter_ = filter; - } - - String getName() - { - return name_; - } - - ImageFilter getFilter() - { - return filter_; - } -} diff --git a/java/ImageProcessing/framework/ImageSender.java b/java/ImageProcessing/framework/ImageSender.java deleted file mode 100644 index c1659267537..00000000000 --- a/java/ImageProcessing/framework/ImageSender.java +++ /dev/null @@ -1,128 +0,0 @@ -package imaging.framework; - -import java.awt.*; -import java.net.*; -import java.io.*; -import java.applet.*; -import JACE.OS.*; -import JACE.Connection.*; - -public class ImageSender -{ - public ImageSender (Applet parent) - { - this.parent_ = parent; - } - - // ****************** - // Currently bombs if it's not in an http or / format - // - public void open (Image image, String url) - { - this.image_ = image; - - this.hostname_ = url; - if (this.hostname_.startsWith ("http://")) - this.hostname_ = this.hostname_.substring (7); - - int index = -1; - if ((index = this.hostname_.indexOf (":")) != -1) - { - String temp = this.hostname_.substring (index + 1); - int i = -1; - if ((i = temp.indexOf ("/")) != -1) - { - this.port_ = (new Integer (temp.substring (0, i))).intValue (); - this.filename_ = temp.substring (i); - } - this.hostname_ = this.hostname_.substring (0, index); - } - else - { - int i = -1; - if ((i = this.hostname_.indexOf ("/")) != -1) - { - this.filename_ = hostname_.substring (i); - } - this.hostname_ = this.hostname_.substring (0, i); - this.port_ = 80; - } - } - - // Maintain compatibility - public int send () - { - return send(null); - } - - /******************************************* - * The authenication string allows the PUT command to work if the server - * accepts the basic HTTP 1.1 encryption scheme - *******************************************/ - public int send (String authentication) - { - ImageByteCounter byteCounter = new ImageByteCounter ("", this.image_, this.parent_); - // StatusIndicator indicator = new StatusIndicator (""); - // ImageByteCounter byteCounter = new ImageByteCounter ("", this.image_, indicator); - int length = byteCounter.count (); - // indicator.dispose (); - // First determine how many bytes we will be sending - /* - try - { - GIFOutputStream ostream = new GIFOutputStream (); - GifEncoder encoder = new GifEncoder (this.image_, ostream); - encoder.encode (); - - length = ostream.count (); - System.out.println ("send: " + length); - } - catch (IOException e) - { - ACE.ERROR ("Exception generating gif"); - } - */ - - GIFHandler gifHandler; - if (authentication == null) - gifHandler = new GIFHandler (this.filename_, this.image_, length); - else - gifHandler = new GIFHandler (this.filename_, this.image_, length, authentication); - - try - { - // Connect to the server and send the image - this.connector_.open (this.hostname_, this.port_); - this.connector_.connect (gifHandler); - } - catch (UnknownHostException e) - { - ACE.ERROR (e); - } - catch (InstantiationException e) - { - ACE.ERROR (e); - } - catch (IllegalAccessException e) - { - ACE.ERROR (e); - } - catch (IOException e) - { - ACE.ERROR (e); - } - - if (gifHandler.returnCode () != -1) - return gifHandler.bytesWritten (); - else - return -1; - } - - private Image image_ = null; - String filename_; - String hostname_; - int port_; - Connector connector_ = new Connector (); - Applet parent_; -} - diff --git a/java/ImageProcessing/framework/IntHashtable.java b/java/ImageProcessing/framework/IntHashtable.java deleted file mode 100644 index 95e6cbc25e0..00000000000 --- a/java/ImageProcessing/framework/IntHashtable.java +++ /dev/null @@ -1,396 +0,0 @@ -// IntHashtable - a Hashtable that uses ints as the keys -// -// This is 90% based on JavaSoft's java.util.Hashtable. -// -// Visit the ACME Labs Java page for up-to-date versions of this and other -// fine Java utilities: http://www.acme.com/java/ - -package imaging.framework; - -import java.util.*; - -/// A Hashtable that uses ints as the keys. -// <P> -// Use just like java.util.Hashtable, except that the keys must be ints. -// This is much faster than creating a new Integer for each access. -// <P> -// <A HREF="/resources/classes/Acme/IntHashtable.java">Fetch the software.</A><BR> -// <A HREF="/resources/classes/Acme.tar.Z">Fetch the entire Acme package.</A> -// <P> -// @see java.util.Hashtable - -public class IntHashtable extends Dictionary implements Cloneable - { - /// The hash table data. - private IntHashtableEntry table[]; - - /// The total number of entries in the hash table. - private int count; - - /// Rehashes the table when count exceeds this threshold. - private int threshold; - - /// The load factor for the hashtable. - private float loadFactor; - - /// Constructs a new, empty hashtable with the specified initial - // capacity and the specified load factor. - // @param initialCapacity the initial number of buckets - // @param loadFactor a number between 0.0 and 1.0, it defines - // the threshold for rehashing the hashtable into - // a bigger one. - // @exception IllegalArgumentException If the initial capacity - // is less than or equal to zero. - // @exception IllegalArgumentException If the load factor is - // less than or equal to zero. - public IntHashtable( int initialCapacity, float loadFactor ) - { - if ( initialCapacity <= 0 || loadFactor <= 0.0 ) - throw new IllegalArgumentException(); - this.loadFactor = loadFactor; - table = new IntHashtableEntry[initialCapacity]; - threshold = (int) ( initialCapacity * loadFactor ); - } - - /// Constructs a new, empty hashtable with the specified initial - // capacity. - // @param initialCapacity the initial number of buckets - public IntHashtable( int initialCapacity ) - { - this( initialCapacity, 0.75f ); - } - - /// Constructs a new, empty hashtable. A default capacity and load factor - // is used. Note that the hashtable will automatically grow when it gets - // full. - public IntHashtable() - { - this( 101, 0.75f ); - } - - /// Returns the number of elements contained in the hashtable. - public int size() - { - return count; - } - - /// Returns true if the hashtable contains no elements. - public boolean isEmpty() - { - return count == 0; - } - - /// Returns an enumeration of the hashtable's keys. - // @see IntHashtable#elements - public synchronized Enumeration keys() - { - return new IntHashtableEnumerator( table, true ); - } - - /// Returns an enumeration of the elements. Use the Enumeration methods - // on the returned object to fetch the elements sequentially. - // @see IntHashtable#keys - public synchronized Enumeration elements() - { - return new IntHashtableEnumerator( table, false ); - } - - /// Returns true if the specified object is an element of the hashtable. - // This operation is more expensive than the containsKey() method. - // @param value the value that we are looking for - // @exception NullPointerException If the value being searched - // for is equal to null. - // @see IntHashtable#containsKey - public synchronized boolean contains( Object value ) - { - if ( value == null ) - throw new NullPointerException(); - IntHashtableEntry tab[] = table; - for ( int i = tab.length ; i-- > 0 ; ) - { - for ( IntHashtableEntry e = tab[i] ; e != null ; e = e.next ) - { - if ( e.value.equals( value ) ) - return true; - } - } - return false; - } - - /// Returns true if the collection contains an element for the key. - // @param key the key that we are looking for - // @see IntHashtable#contains - public synchronized boolean containsKey( int key ) - { - IntHashtableEntry tab[] = table; - int hash = key; - int index = ( hash & 0x7FFFFFFF ) % tab.length; - for ( IntHashtableEntry e = tab[index] ; e != null ; e = e.next ) - { - if ( e.hash == hash && e.key == key ) - return true; - } - return false; - } - - /// Gets the object associated with the specified key in the - // hashtable. - // @param key the specified key - // @returns the element for the key or null if the key - // is not defined in the hash table. - // @see IntHashtable#put - public synchronized Object get( int key ) - { - IntHashtableEntry tab[] = table; - int hash = key; - int index = ( hash & 0x7FFFFFFF ) % tab.length; - for ( IntHashtableEntry e = tab[index] ; e != null ; e = e.next ) - { - if ( e.hash == hash && e.key == key ) - return e.value; - } - return null; - } - - /// A get method that takes an Object, for compatibility with - // java.util.Dictionary. The Object must be an Integer. - public Object get( Object okey ) - { - if ( ! ( okey instanceof Integer ) ) - throw new InternalError( "key is not an Integer" ); - Integer ikey = (Integer) okey; - int key = ikey.intValue(); - return get( key ); - } - - /// Rehashes the content of the table into a bigger table. - // This method is called automatically when the hashtable's - // size exceeds the threshold. - protected void rehash() - { - int oldCapacity = table.length; - IntHashtableEntry oldTable[] = table; - - int newCapacity = oldCapacity * 2 + 1; - IntHashtableEntry newTable[] = new IntHashtableEntry[newCapacity]; - - threshold = (int) ( newCapacity * loadFactor ); - table = newTable; - - for ( int i = oldCapacity ; i-- > 0 ; ) - { - for ( IntHashtableEntry old = oldTable[i] ; old != null ; ) - { - IntHashtableEntry e = old; - old = old.next; - - int index = ( e.hash & 0x7FFFFFFF ) % newCapacity; - e.next = newTable[index]; - newTable[index] = e; - } - } - } - - /// Puts the specified element into the hashtable, using the specified - // key. The element may be retrieved by doing a get() with the same key. - // The key and the element cannot be null. - // @param key the specified key in the hashtable - // @param value the specified element - // @exception NullPointerException If the value of the element - // is equal to null. - // @see IntHashtable#get - // @return the old value of the key, or null if it did not have one. - public synchronized Object put( int key, Object value ) - { - // Make sure the value is not null. - if ( value == null ) - throw new NullPointerException(); - - // Makes sure the key is not already in the hashtable. - IntHashtableEntry tab[] = table; - int hash = key; - int index = ( hash & 0x7FFFFFFF ) % tab.length; - for ( IntHashtableEntry e = tab[index] ; e != null ; e = e.next ) - { - if ( e.hash == hash && e.key == key ) - { - Object old = e.value; - e.value = value; - return old; - } - } - - if ( count >= threshold ) - { - // Rehash the table if the threshold is exceeded. - rehash(); - return put( key, value ); - } - - // Creates the new entry. - IntHashtableEntry e = new IntHashtableEntry(); - e.hash = hash; - e.key = key; - e.value = value; - e.next = tab[index]; - tab[index] = e; - ++count; - return null; - } - - /// A put method that takes an Object, for compatibility with - // java.util.Dictionary. The Object must be an Integer. - public Object put( Object okey, Object value ) - { - if ( ! ( okey instanceof Integer ) ) - throw new InternalError( "key is not an Integer" ); - Integer ikey = (Integer) okey; - int key = ikey.intValue(); - return put( key, value ); - } - - /// Removes the element corresponding to the key. Does nothing if the - // key is not present. - // @param key the key that needs to be removed - // @return the value of key, or null if the key was not found. - public synchronized Object remove( int key ) - { - IntHashtableEntry tab[] = table; - int hash = key; - int index = ( hash & 0x7FFFFFFF ) % tab.length; - for ( IntHashtableEntry e = tab[index], prev = null ; e != null ; prev = e, e = e.next ) - { - if ( e.hash == hash && e.key == key ) - { - if ( prev != null ) - prev.next = e.next; - else - tab[index] = e.next; - --count; - return e.value; - } - } - return null; - } - - /// A remove method that takes an Object, for compatibility with - // java.util.Dictionary. The Object must be an Integer. - public Object remove( Object okey ) - { - if ( ! ( okey instanceof Integer ) ) - throw new InternalError( "key is not an Integer" ); - Integer ikey = (Integer) okey; - int key = ikey.intValue(); - return remove( key ); - } - - /// Clears the hash table so that it has no more elements in it. - public synchronized void clear() - { - IntHashtableEntry tab[] = table; - for ( int index = tab.length; --index >= 0; ) - tab[index] = null; - count = 0; - } - - /// Creates a clone of the hashtable. A shallow copy is made, - // the keys and elements themselves are NOT cloned. This is a - // relatively expensive operation. - public synchronized Object clone() - { - try - { - IntHashtable t = (IntHashtable) super.clone(); - t.table = new IntHashtableEntry[table.length]; - for ( int i = table.length ; i-- > 0 ; ) - t.table[i] = ( table[i] != null ) ? - (IntHashtableEntry) table[i].clone() : null; - return t; - } - catch ( CloneNotSupportedException e) - { - // This shouldn't happen, since we are Cloneable. - throw new InternalError(); - } - } - - /// Converts to a rather lengthy String. - public synchronized String toString() - { - int max = size() - 1; - StringBuffer buf = new StringBuffer(); - Enumeration k = keys(); - Enumeration e = elements(); - buf.append( "{" ); - - for ( int i = 0; i <= max; ++i ) - { - String s1 = k.nextElement().toString(); - String s2 = e.nextElement().toString(); - buf.append( s1 + "=" + s2 ); - if ( i < max ) - buf.append( ", " ); - } - buf.append( "}" ); - return buf.toString(); - } - } - - -class IntHashtableEntry - { - int hash; - int key; - Object value; - IntHashtableEntry next; - - protected Object clone() - { - IntHashtableEntry entry = new IntHashtableEntry(); - entry.hash = hash; - entry.key = key; - entry.value = value; - entry.next = ( next != null ) ? (IntHashtableEntry) next.clone() : null; - return entry; - } - } - - -class IntHashtableEnumerator implements Enumeration - { - boolean keys; - int index; - IntHashtableEntry table[]; - IntHashtableEntry entry; - - IntHashtableEnumerator( IntHashtableEntry table[], boolean keys ) - { - this.table = table; - this.keys = keys; - this.index = table.length; - } - - public boolean hasMoreElements() - { - if ( entry != null ) - return true; - while ( index-- > 0 ) - if ( ( entry = table[index] ) != null ) - return true; - return false; - } - - public Object nextElement() - { - if ( entry == null ) - while ( ( index-- > 0 ) && ( ( entry = table[index] ) == null ) ) - ; - if ( entry != null ) - { - IntHashtableEntry e = entry; - entry = e.next; - return keys ? new Integer( e.key ) : e.value; - } - throw new NoSuchElementException( "IntHashtableEnumerator" ); - } - } diff --git a/java/ImageProcessing/framework/ListFiles.java b/java/ImageProcessing/framework/ListFiles.java deleted file mode 100644 index 7abe067341c..00000000000 --- a/java/ImageProcessing/framework/ListFiles.java +++ /dev/null @@ -1,167 +0,0 @@ -package imaging.framework; - -import java.net.*; -import java.io.*; -import java.applet.*; - -public class ListFiles -{ - public ListFiles () - { - } - - public ListFiles (FileBrowser browser, Applet parent) - { - this.browser_ = browser; - try - { - this.fileIcon_ = new Icon (parent.getCodeBase () + - "../ImageProcessing/framework/" + - "doc01.gif", - parent); - this.dirIcon_ = new Icon (parent.getCodeBase () + - "../ImageProcessing/framework/" + - "file03.gif", - parent); - } - catch (MalformedURLException e) - { - } - } - - public String stripProtocolHeader (String url) - { - if (url.startsWith ("http://")) - { - return url.substring (7); - } - else - return url; - } - - public int listFiles (String url, FileNode fileNode) - { - String s = this.stripProtocolHeader (url); - String hostname = s; - String directory = null; - int index = -1; - - if ((index = s.indexOf ("/")) != -1) - { - hostname = s.substring (0, index); - directory = s.substring (index); - } - return this.listFiles (hostname, directory, fileNode); - } - - public int listFiles (String url, String directory, FileNode fileNode) - { - boolean validDirectory = false; - int count = 0; - String hostname = this.stripProtocolHeader (url); - this.url_ = url; - this.directory_ = directory; - try - { - Socket sock = new Socket (hostname, 80); - PrintStream out = new PrintStream (sock.getOutputStream ()); - DataInputStream in = new DataInputStream (sock.getInputStream ()); - System.out.println ("Connected to: " + hostname); - - String request = null; - if (directory.endsWith ("/")) - request = "GET " + directory + "\n\n"; - else - request = "GET " + directory + "/\n\n"; - - System.out.println ("Sending request: " + request); - - // Send the request - out.println (request); - - String reply = null; - // Receive the reply - - // Read all the data in a loop. Search for "Parent Directory" - // to verify that this indeed is a directory. If we encounter - // the string "<HTML>" then assume that this is an HTML page - // and therefore the directory contained "index.html" - while ((reply = in.readLine ()) != null) - { - if (validDirectory) - this.parse (reply, fileNode); - else - { - // Take a guess at the type of data we get back - if (reply.indexOf ("Parent Directory") != -1) - validDirectory = true; - else if ((reply.toUpperCase ().indexOf ("<HTML>") != -1) || - (reply.toUpperCase ().indexOf ("<P>") != -1) || - (reply.toUpperCase ().indexOf ("<TABLE") != -1)) - return 0; - } - } - } - catch (MalformedURLException e) - { - System.err.println (e); - } - catch (IOException e) - { - System.err.println (e); - } - if (validDirectory == false) - return -1; - return 1; - } - - private int parse (String s, FileNode fileNode) - { - int i= -1; - int j = -1; - int startIndex = -1; - int endIndex = -1; - boolean isFile = true; - String name = null; - - if ((i = s.indexOf ("HREF=")) != -1) - startIndex = i + 6; - else - return -1; - - if ((j = s.indexOf (">", i)) != -1) - endIndex = j - 1; - else - return -1; - - // Check if this is a directory - if (s.charAt (endIndex - 1) == '/') - isFile = false; - - if (endIndex >= startIndex) - { - name = s.substring (startIndex, endIndex); - if (browser_ != null) - { - // System.out.println (name); - if (isFile) - fileNode.addEntry (new FileNode (name, this.fileIcon_, null, - fileNode.app ())); - else - { - FileNode f = new FileNode (name, this.dirIcon_, this, - fileNode.app ()); - fileNode.addEntry (f); - f.setExpandable (true); - } - } - } - return 0; - } - - private FileBrowser browser_ = null; - private String url_ = null; - private String directory_ = null; - private Icon fileIcon_; - private Icon dirIcon_; -} diff --git a/java/ImageProcessing/framework/LoadURLFrame.java b/java/ImageProcessing/framework/LoadURLFrame.java deleted file mode 100755 index 610d9eaafa8..00000000000 --- a/java/ImageProcessing/framework/LoadURLFrame.java +++ /dev/null @@ -1,142 +0,0 @@ -package imaging.framework; - -import java.awt.*; -import java.awt.image.*; -import java.net.*; -import java.io.*; - -/****************************************************** - * Future idea: - * - * Create a smart button class with an invoke method that's - * to be called when the button is pressed. - * - * Subclasses override the invoke method to define - * specific behavior. - * - * That would allow things like load and save frames - * to be almost exactly the same -- one could inherit - * from the other and override addButtons, etc - *****************************************************/ - -class LoadURLFrame extends Frame -{ - public LoadURLFrame (String title, ImageApp parent) - { - super (title); - - this.parent_ = parent; - this.resize (500,130); - - this.addButtons(); - } - - private void addButtons() - { - this.setLayout (new BorderLayout ()); - - Panel textPanel = new Panel (); - textPanel.setLayout (new BorderLayout ()); - textPanel.add ("North", new Label ("Image Location:")); - textPanel.add ("Center", this.openURLText_); - - Panel buttonPanel = new Panel (); - buttonPanel.setLayout (new FlowLayout (FlowLayout.CENTER)); - - buttonPanel.add (this.openButton_); - - buttonPanel.add (this.clearButton_); - buttonPanel.add (this.cancelButton_); - - this.add ("North", textPanel); - this.add ("South", buttonPanel); - } - - private int browseFiles (String url) - { - fileBrowser_ = new FileBrowser ("Browse", this.parent_); - ListFiles list = new ListFiles (this.fileBrowser_, this.parent_); - return this.fileBrowser_.initialize (url, list); - } - - // Handle all action events - public boolean action (Event e, Object arg) - { - if (e.target instanceof Button) - { - if (e.target == this.openButton_) - { - this.getURL (); - } - else if (e.target == this.clearButton_) - { - this.openURLText_.setText (new String ()); - this.openURLText_.requestFocus (); - } - else if (e.target == this.cancelButton_) - this.dispose (); - validate (); - return true; - } - else - return false; - } - - public boolean keyDown (Event e, int key) - { - if (key == 10) - { - this.getURL (); - return true; - } - else - return false; - } - - private void getURL () - { - this.hide (); - String url = this.openURLText_.getText (); - this.dispose (); - - // The following is only for debugging - if (url.compareTo ("ru") == 0) - url = "http://www.cs/~pjain/gifs/"; - else if (url.compareTo ("pj") == 0) - url = "http://www.cs/~pjain/myphoto.gif"; - - if (!url.endsWith ("/") && - (this.parent_.openURL (url) != -1)) // Try to open it as an image - return; - else - { - ListFiles list = new ListFiles (); - switch (this.browseFiles (url)) - { - case 1: - this.fileBrowser_.show (); - break; - case 0: - DialogManager.popDialog (DialogType.MALFORMED_URL, - "Error: Directory contains index.html"); - break; - default: - DialogManager.popDialog (DialogType.MALFORMED_URL, - "Error: Not a valid image or URL not found"); - break; - } - } - } - - // Create the Open URL Frame and also the buttons which appear in - // it - private Button openButton_ = new Button ("Open"); - private Button clearButton_ = new Button ("Clear"); - private Button cancelButton_ = new Button ("Cancel"); - - private TextField openURLText_ = new TextField (40); - - private FileBrowser fileBrowser_ = null; - private ImageApp parent_; - -} diff --git a/java/ImageProcessing/framework/Makefile b/java/ImageProcessing/framework/Makefile deleted file mode 100644 index 1187b8a88d7..00000000000 --- a/java/ImageProcessing/framework/Makefile +++ /dev/null @@ -1,45 +0,0 @@ -# Makefile - -.SUFFIXES: .java .class - -JACE_WRAPPER = ../.. -CLASSDIR = $(JACE_WRAPPER)/classes -DOCDIR = $(JACE_WRAPPER)/doc - -CLASSPATH := $(CLASSDIR):$(CLASSPATH) - -all: - javac -d ${JACE_WRAPPER}/classes $(files) - -clean: - rm -rf *~ - -realclean: clean - rm -rf $(JACE_WRAPPER)/classes/imaging/framework - -files = ImageProcessor.java \ - DialogType.java \ - LoadURLFrame.java \ - SaveURLFrame.java \ - DialogManager.java \ - ImageCanvas.java \ - ImageApp.java \ - BaseButton.java \ - FilePanel.java \ - StatusDisplay.java \ - Icon.java \ - Hierarchy.java \ - HierarchyAdapter.java \ - FileBrowser.java \ - ListFiles.java \ - IntHashtable.java \ - ImageEncoder.java \ - GifEncoder.java \ - ImageByteCounter.java \ - StatusIndicator.java \ - GIFHandler.java \ - ImageSender.java \ - ServerTest.java \ - ServerHandler.java \ - Tester.java \ - TestHandler.java diff --git a/java/ImageProcessing/framework/MedJava.html b/java/ImageProcessing/framework/MedJava.html deleted file mode 100644 index a073413bfbb..00000000000 --- a/java/ImageProcessing/framework/MedJava.html +++ /dev/null @@ -1,15 +0,0 @@ -<HTML> - -<BODY text = "#000000" -link="#000fff" -vlink="#ff0f0f" -bgcolor="#888888"> - -<HR> -<APPLET CODEBASE="/classes/" CODE="imaging.framework.ImageApp.class" width=700 height=700> -<param name=filename value="myphoto.gif"> - -</APPLET> -<HR> - -</HTML> diff --git a/java/ImageProcessing/framework/Options.java b/java/ImageProcessing/framework/Options.java deleted file mode 100644 index edbe90ba904..00000000000 --- a/java/ImageProcessing/framework/Options.java +++ /dev/null @@ -1,25 +0,0 @@ -package imaging.framework; - -import java.awt.*; - -class Options -{ - // Set GridBagConstraints - public static void constrain (Container container, Component component, - int gridx, int gridy, - int gridwidth, int gridheight, - int fill, int anchor) - { - GridBagConstraints c = new GridBagConstraints (); - GridBagLayout gbl = (GridBagLayout) container.getLayout (); - - c.gridx = gridx; - c.gridy = gridy; - c.gridwidth = gridwidth; - c.gridheight = gridheight; - c.fill = fill; - c.anchor = anchor; - gbl.setConstraints (component, c); - container.add (component); - } -} diff --git a/java/ImageProcessing/framework/SaveURLFrame.java b/java/ImageProcessing/framework/SaveURLFrame.java deleted file mode 100755 index c3b6adf3490..00000000000 --- a/java/ImageProcessing/framework/SaveURLFrame.java +++ /dev/null @@ -1,133 +0,0 @@ -package imaging.framework; - -import java.awt.*; -import java.awt.image.*; -import java.net.*; -import java.io.*; - -/****************************************************** - * Future idea: - * - * Create a smart button class with an invoke method that's - * to be called when the button is pressed. - * - * Subclasses override the invoke method to define - * specific behavior. - * - * That would allow things like load and save frames - * to be almost exactly the same -- one could inherit - * from the other and override addButtons, etc - *****************************************************/ - - -class SaveURLFrame extends Frame -{ - public SaveURLFrame (String title, ImageApp parent) - { - super (title); - - this.parent_ = parent; - this.resize (500,200); - - this.addButtons(); - } - - private void addButtons() - { - this.setLayout (new BorderLayout ()); - - Panel textPanels = new Panel(); - textPanels.setLayout(new BorderLayout()); - - Panel URLPanel = new Panel (); - URLPanel.setLayout (new BorderLayout ()); - URLPanel.add ("North", new Label ("Image Location:")); - URLPanel.add ("Center", this.openURLText_); - - // Password panel - Panel pwPanel = new Panel(); - pwPanel.setLayout (new BorderLayout ()); - pwPanel.add ("North", new Label ("Authentication:")); - pwPanel.add ("Center", this.passwordText_); - - textPanels.add("North", URLPanel); - textPanels.add("South", pwPanel); - - Panel buttonPanel = new Panel (); - buttonPanel.setLayout (new FlowLayout (FlowLayout.CENTER)); - - buttonPanel.add (this.saveButton_); - buttonPanel.add (this.clearButton_); - buttonPanel.add (this.cancelButton_); - - this.add ("North", textPanels); - this.add ("South", buttonPanel); - } - - // Handle all action events - public boolean action (Event e, Object arg) - { - if (e.target instanceof Button) - { - if (e.target == this.saveButton_) - { - this.saveFile (); - } - else if (e.target == this.clearButton_) - { - this.openURLText_.setText (new String ()); - this.openURLText_.requestFocus (); - } - else if (e.target == this.cancelButton_) - this.dispose (); - validate (); - return true; - } - else - return false; - } - - public boolean keyDown (Event e, int key) - { - if (key == 10) - { - this.saveFile (); - return true; - } - else - return false; - } - - private void saveFile () - { - String url = this.openURLText_.getText (); - String password = this.passwordText_.getText(); - this.hide (); - this.dispose (); - - // The following is only for debugging - if (url.startsWith ("#")) - url = "http://merengue.cs:5432/" + url.substring (1); - - if ((password != null) && (password.length() > 0)) - this.parent_.saveFile (url, password); - else - this.parent_.saveFile (url); - } - - - // Create the Open URL Frame and also the buttons which appear in - // it - private Button saveButton_ = new Button ("Save"); - private Button clearButton_ = new Button ("Clear"); - private Button cancelButton_ = new Button ("Cancel"); - - private TextField openURLText_ = new TextField (40); - private TextField passwordText_ = new TextField (40); - - private ImageApp parent_; - - // Flag indicating if this is a load window or a save window - private boolean open_ = true; - -} diff --git a/java/ImageProcessing/framework/Separator.java b/java/ImageProcessing/framework/Separator.java deleted file mode 100644 index 6bd610e1ad9..00000000000 --- a/java/ImageProcessing/framework/Separator.java +++ /dev/null @@ -1,90 +0,0 @@ -package gjt; - -import java.awt.*; - -/** - * A separator that is drawn either vertically or horizontally - * depending upon how it is laid out. Can be drawn either - * etched-in or etched-out, with varying thicknesses. Both - * thickness and etching are settable at construction time - * only.<p> - * - * Default thickness is 2 pixels and default etching is - * Etching.IN. Note that thicknesses greater than 4 loose the - * etching effect.<p> - * - * @version 1.0, Apr 1 1996 - * @author David Geary - * @see Etching - * @see gjt.test.SeparatorTest - */ -public class Separator extends Canvas { - static private Etching _defaultEtching = Etching.IN; - static private int _defaultThickness = 2; - - private Etching etching; - private int thickness; - - public Separator() { - this(_defaultThickness, _defaultEtching); - } - public Separator(int thickness) { - this(thickness, _defaultEtching); - } - public Separator(Etching etching) { - this(_defaultThickness, etching); - } - public Separator(int thickness, Etching etching) { - this.etching = etching; - this.thickness = thickness; - resize(thickness, thickness); - } - public Dimension minimumSize() { - return preferredSize(); - } - public Dimension preferredSize() { - return new Dimension(thickness, thickness); - } - public void paint(Graphics g) { - Dimension size = size(); - Color brighter = getBackground().brighter().brighter(); - Color darker = getBackground().darker().darker(); - - if(etching == Etching.IN) { - if(size.width > size.height) - paintHorizontal(g, size, darker, brighter); - else - paintVertical(g, size, darker, brighter); - } - else { - if(size.width > size.height) - paintHorizontal(g, size, brighter, darker); - else - paintVertical(g, size, brighter, darker); - } - } - public String paramString() { - Dimension size = size(); - Orientation orient = size.width > size.height ? - Orientation.HORIZONTAL : - Orientation.VERTICAL; - return super.paramString() + "thickness=" + - thickness + "," + etching + "," + orient; - } - private void paintHorizontal(Graphics g, Dimension size, - Color top, Color bottom) { - g.setColor(top); - g.fillRect(0, (size.height/2) - (thickness/2), - size.width, thickness/2); - g.setColor(bottom); - g.fillRect(0, size.height/2, size.width, thickness/2); - } - private void paintVertical(Graphics g, Dimension size, - Color left, Color right) { - g.setColor(left); - g.fillRect((size.width/2) - (thickness/2), - 0, thickness/2, size.height); - g.setColor(right); - g.fillRect(size.width/2, 0, thickness/2, size.height); - } -} diff --git a/java/ImageProcessing/framework/ServerHandler.java b/java/ImageProcessing/framework/ServerHandler.java deleted file mode 100644 index 88da64d6328..00000000000 --- a/java/ImageProcessing/framework/ServerHandler.java +++ /dev/null @@ -1,50 +0,0 @@ -package imaging.framework; - -import java.io.*; -import java.net.*; -import JACE.OS.*; -import JACE.Connection.*; - -public class ServerHandler extends SvcHandler -{ - public int open (Object obj) - { - new Thread (this).start (); - return 0; - } - - public void run () - { - int msg_len; - try - { - while (true) - { - StringBuffer msg = new StringBuffer (); - msg_len = this.peer ().recv (msg); - if (msg_len == 0) - break; - System.out.println (msg); - } - } - catch (NullPointerException e) - { - ACE.ERROR ("connection reset by peer"); - } - catch (IOException e) - { - ACE.ERROR (e); - } - finally - { - try - { - this.peer ().close (); - } - catch (IOException e) - { - } - } - - } -} diff --git a/java/ImageProcessing/framework/ServerTest.java b/java/ImageProcessing/framework/ServerTest.java deleted file mode 100644 index b5ab00596ea..00000000000 --- a/java/ImageProcessing/framework/ServerTest.java +++ /dev/null @@ -1,67 +0,0 @@ -package imaging.framework; - -import java.io.*; -import java.net.*; -import JACE.OS.*; -import JACE.Connection.*; - -public class ServerTest -{ - void print_usage_and_die () - { - System.out.println ("Usage: ServerTest [<port>]"); - System.exit (0); - } - - public void init (int port) - { - try - { - Acceptor acceptor = new Acceptor (Class.forName ("imaging.framework.ServerHandler")); - acceptor.open (port); - while (true) - { - acceptor.accept (); - } - } - catch (ClassNotFoundException e) - { - ACE.ERROR (e); - } - catch (SocketException e) - { - ACE.ERROR ("Socket Exception: " + e); - } - catch (InstantiationException e) - { - ACE.ERROR (e); - } - catch (IllegalAccessException e) - { - ACE.ERROR ("Dang!" + e); - } - catch (IOException e) - { - ACE.ERROR (e); - } - } - - public static void main (String [] args) - { - int port = ACE.DEFAULT_SERVER_PORT; - ServerTest server = new ServerTest (); - - if (args.length == 1) - { - try - { - port = Integer.parseInt (args[0]); - } - catch (NumberFormatException e) - { - server.print_usage_and_die (); - } - } - server.init (port); - } -} diff --git a/java/ImageProcessing/framework/StatusDisplay.java b/java/ImageProcessing/framework/StatusDisplay.java deleted file mode 100644 index e20e9b8384d..00000000000 --- a/java/ImageProcessing/framework/StatusDisplay.java +++ /dev/null @@ -1,23 +0,0 @@ -package imaging.framework; - -import java.awt.*; -import gjt.Separator; - -class StatusDisplay extends Panel -{ - public StatusDisplay () - { - this.setLayout (new BorderLayout ()); - this.textField_.setEditable (false); - this.add ("North", new Separator ()); - this.add ("Center", this.textField_); - this.add ("South", new Separator ()); - } - - public void setText (String s) - { - this.textField_.setText (s); - } - - private TextField textField_ = new TextField (); -} diff --git a/java/ImageProcessing/framework/StatusIndicator.java b/java/ImageProcessing/framework/StatusIndicator.java deleted file mode 100644 index 0f13a71c016..00000000000 --- a/java/ImageProcessing/framework/StatusIndicator.java +++ /dev/null @@ -1,70 +0,0 @@ -package imaging.framework; - -import java.io.*; -import java.awt.*; - -public class StatusIndicator extends Frame -{ - public StatusIndicator (String title, Image image) - { - super (title); - this.image_ = image; - // statusCanvas_ = new CounterCanvas (image); - this.setLayout (new BorderLayout ()); - this.text_ = new TextField (); - this.label_ = new TextField ("Generating"); - - this.add ("North", this.label_); - this.add ("Center", text_); - // this.add ("Center", statusCanvas_); - // this.add ("Center", new Button ("Hello")); - // this.add ("South", new Button ("Hello")); - this.resize (300,200); - this.show (); - } - - public void update (int count) - { - // this.label_.setText ("Generating..."); - this.text_.setText ((new Integer (count++)).toString ()); - // statusCanvas_.update (); - // textCanvas_.setCount (count); - } - - TextField text_; - TextField label_; - Image image_; - // CounterCanvas statusCanvas_ = null; -} - -class CounterCanvas extends Canvas -{ - public CounterCanvas (Image image) - { - this.image_ = image; - } - - public void paint (Graphics g) - { - g.clearRect (0, 0, this.size ().width, this.size ().height); - this.setBackground (Color.white); - - if (this.image_ != null) - g.drawImage(this.image_, - 40, 40, - this.image_.getWidth (this), - this.image_.getHeight (this), - this); - - g.setFont (new Font ("TimesRoman", Font.PLAIN, 18)); - g.drawString ("Generating GIF format: ", 120, 120); - } - - public void update () - { - repaint (); - } - - Image image_ = null; -} - diff --git a/java/ImageProcessing/framework/TestHandler.java b/java/ImageProcessing/framework/TestHandler.java deleted file mode 100644 index 5a97ae6f8b2..00000000000 --- a/java/ImageProcessing/framework/TestHandler.java +++ /dev/null @@ -1,149 +0,0 @@ -package imaging.framework; - -import java.io.*; -import java.net.*; -import java.awt.*; -import java.awt.image.*; -import java.util.*; -import JACE.OS.*; -import JACE.Connection.*; -import JACE.Timers.*; - -public class TestHandler extends SvcHandler -{ - public TestHandler (String imageList, - String JAWSServer, int JAWSPort, - ImageApp parent) - { - this.imageList_ = imageList; - this.JAWSServer_ = JAWSServer; - this.JAWSPort_ = JAWSPort; - this.parent_ = parent; - this.filterTable_ = this.parent_.filterTable(); - } - - public int open (Object obj) - { - // We got called by the Connector so assume connection was set up - // fine and therfore do not use standard output - stdOut = false; - - doTesting (); - return 0; - } - - public void doTesting () - { - if (imageList_ != null) - { - StringTokenizer tokens = new StringTokenizer (imageList_); - String image = null; - - // Now parse the string, picking up image names. - while (tokens.hasMoreTokens ()) - { - // Get the next token - image = tokens.nextToken (); - this.process (image); - } - } - } - - private void write (String data) - { - try - { - // If we are connected to the server then send the data to the - // server, otherwise write it to standard out. - if (stdOut) - System.out.print (data); - else - this.peer ().send (data); - } - catch (IOException e) - { - ACE.ERROR (e); - } - } - - private void process (String image) - { - this.write ("Image: " + image + "\n"); - - this.loadImage (image); - this.processImage (image); - this.uploadImage (image); - } - - private void loadImage (String image) - { - this.write ("\tLoading..."); - - // Start the timer - timer_.start (); - - // Load the image - parent_.openURL (image); - - // Stop the timer - timer_.stop (); - long time = timer_.elapsedTime (); - - this.write ("done (" + ((double) time)/1000 + " seconds).\n"); - } - - private void processImage (String image) - { - this.write ("\tProcessing...\n"); - - for (Enumeration e = filterTable_.keys (); e.hasMoreElements (); ) - { - String filterName = (String) e.nextElement (); - - this.write ("\t\t" + filterName + "..."); - - ImageFilter filter = (ImageFilter) filterTable_.get (filterName); - - // Reset the image -- in case it was modified earlier - this.parent_.resetImage (); - - // Start the timer - timer_.start (); - - this.parent_.apply (filter); - - // Stop the timer - timer_.stop (); - long time = timer_.elapsedTime (); - - this.write ("done (" + ((double) time)/1000 + " seconds).\n"); - } - } - - private void uploadImage (String image) - { - int index = image.lastIndexOf ("/"); - String imageName = image.substring (index+1); - String url = "http://" + this.JAWSServer_ + ":" + this.JAWSPort_ + "/" + imageName; - this.write ("\tUploading " + url + "..."); - - // Start the timer - timer_.start (); - - this.parent_.saveFile (url); - - // Stop the timer - timer_.stop (); - long time = timer_.elapsedTime (); - - this.write ("done (" + ((double) time)/1000 + " seconds).\n"); - } - - private ImageApp parent_ = null; - private ProfileTimer timer_ = new ProfileTimer (); - private String imageList_ = null; - private boolean stdOut = true; - private Hashtable filterTable_ = null; - private String JAWSServer_ = null; - private int JAWSPort_ = 5432; -} diff --git a/java/ImageProcessing/framework/Tester.java b/java/ImageProcessing/framework/Tester.java deleted file mode 100644 index 79204bb4c5a..00000000000 --- a/java/ImageProcessing/framework/Tester.java +++ /dev/null @@ -1,148 +0,0 @@ -package imaging.framework; - -import java.io.*; -import java.net.*; -import java.awt.*; -import java.awt.image.*; -import java.util.*; -import JACE.Connection.*; -import JACE.OS.*; - -public class Tester implements Runnable -{ - public static final String DEFAULT_TEST_SERVER = "siesta.cs.wustl.edu"; - public static final int DEFAULT_TEST_SERVER_PORT = 7787; - public static final String DEFAULT_JAWS_SERVER = "siesta.cs.wustl.edu"; - public static final int DEFAULT_JAWS_SERVER_PORT = 5432; - - public Tester (String testInFile, - ImageApp parent) - { - this.testInFile_ = testInFile; - this.parent_ = parent; - } - - public void initialize () - { - System.out.println ("Initializing tester..."); - - // Get the hostname of the test server - this.server_ = this.parent_.getParameter ("testServer"); - if (this.server_ == null) - this.server_ = DEFAULT_TEST_SERVER; - - // Get the port number of the test server - String testPortString = this.parent_.getParameter ("testPort"); - if (testPortString == null) - this.port_ = DEFAULT_TEST_SERVER_PORT; - else - this.port_ = (new Integer (testPortString)).intValue (); - - // Get the hostname of the JAWS server - this.JAWSServer_ = this.parent_.getParameter ("JAWSServer"); - if (this.JAWSServer_ == null) - this.JAWSServer_ = DEFAULT_JAWS_SERVER; - - // Get the port number of the JAWS server - String JAWSPortString = this.parent_.getParameter ("JAWSPort"); - if (JAWSPortString == null) - this.JAWSServerPort_ = DEFAULT_JAWS_SERVER_PORT; - else - this.JAWSServerPort_ = (new Integer (JAWSPortString)).intValue (); - - System.out.println ("Test Input File: " + this.testInFile_); - System.out.println ("Test Server: " + this.server_ + "\tPort: " + this.port_); - System.out.println ("JAWS Server: " + this.JAWSServer_ + "\tPort: " + this.JAWSServerPort_); - - // Run in your own thread of control - (new Thread (this)).start (); - } - - public void run () - { - this.setupConnection (this.getImages ()); - } - - private String getImages () - { - URL inputURL; - String imageList = null; - try - { - // Create input URL - inputURL = new URL (this.testInFile_); - - // Get the input stream and pipe it to a DataInputStream - DataInputStream iStream = new DataInputStream (inputURL.openStream ()); - - // Create a buffer to hold all the data we get - StringBuffer tempBuf = new StringBuffer (); - // Keep reading the data until we are done - String tempString = iStream.readLine (); - while (tempString != null) - { - tempBuf.append (tempString); - tempBuf.append (" "); - tempString = iStream.readLine (); - } - imageList = tempBuf.toString (); - } - catch (MalformedURLException e) - { - ACE.ERROR (e); - } - catch (IOException e) - { - ACE.ERROR (e); - } - return imageList; - } - - private void setupConnection (String imageList) - { - // First try to connect to the server. If the server is not - // running then we will write to standard output. - - // Create a handler which will handle our connection. - TestHandler handler = new TestHandler (imageList, - this.JAWSServer_, this.JAWSServerPort_, - this.parent_); - try - { - Connector connector = new Connector (); - connector.open (server_, port_); - connector.connect (handler); - } - catch (UnknownHostException e) - { - ACE.ERROR (e); - } - catch (SocketException e) - { - System.out.println ("Test Server not running! Writing to standard out..."); - // The server is not running so write all the output to screen - handler.doTesting (); - } - catch (InstantiationException e) - { - ACE.ERROR (e); - } - catch (IllegalAccessException e) - { - ACE.ERROR (e); - } - catch (IOException e) - { - ACE.ERROR (e); - } - } - - private String testInFile_ = null; - private ImageApp parent_ = null; - private String server_ = "siesta.cs.wustl.edu"; - private int port_ = 7787; - - private String JAWSServer_ = "siesta.cs.wustl.edu"; - private int JAWSServerPort_ = 5432; -} - diff --git a/java/ImageProcessing/framework/doc01.gif b/java/ImageProcessing/framework/doc01.gif Binary files differdeleted file mode 100644 index 51262529f6d..00000000000 --- a/java/ImageProcessing/framework/doc01.gif +++ /dev/null diff --git a/java/ImageProcessing/framework/file03.gif b/java/ImageProcessing/framework/file03.gif Binary files differdeleted file mode 100644 index c98654c604b..00000000000 --- a/java/ImageProcessing/framework/file03.gif +++ /dev/null diff --git a/java/ImageProcessing/framework/filter.conf b/java/ImageProcessing/framework/filter.conf deleted file mode 100644 index 2e90ea136ce..00000000000 --- a/java/ImageProcessing/framework/filter.conf +++ /dev/null @@ -1,15 +0,0 @@ -imaging.filters.EmbossFilter -imaging.filters.BleachFilter -imaging.filters.BlurFilter -imaging.filters.DarkenFilter -imaging.filters.DeSpeckleFilter -imaging.filters.EdgeDetectFilter -imaging.filters.OilPaintFilter -imaging.filters.PixelizeFilter -imaging.filters.RotateFilter -imaging.filters.SharpenFilter -imaging.filters.SpreadFilter - - - - diff --git a/java/ImageProcessing/framework/help.conf b/java/ImageProcessing/framework/help.conf deleted file mode 100644 index 8a07e2867d9..00000000000 --- a/java/ImageProcessing/framework/help.conf +++ /dev/null @@ -1,216 +0,0 @@ - MedJava - ~~~~~~~ - -Overview --------- - -MedJava is a prototype of a large scale distributed medical imaging -system. It has been developed using Java, in particular, several -components of Java ACE. - -Here are the key features of the MedJava toolkit: - -* Images can be both downloaded and uploaded across the network. -* Images can be uploaded to Web servers that support HTTP PUT - functionality (for example, JAWS). -* The tool contains more than a dozen image filters to do image - processing. -* The image filters can be configured into the system dynamically - using the Service Configurator pattern. - -Please send comments/suggestions to Prashant Jain (pjain@cs.wustl.edu). - -====================================================================== -Getting Started ---------------- - -MedJava applet can be configured with several (optional) parameters -via the HTML file from which the applet is invoked. Here is a list of -the parameters: - -Note: - 1) * indicates test-mode parameters - 2) All Default URLs begin with - http://www.cs.wustl.edu/~pjain/java/ACE_wrappers/java/ImageProcessing/framework/ - -<START> -Name -<TAB> -<TAB> -Description -<TAB> -<TAB> -<TAB> -<TAB> -Default -<P> --------------------------------------------------------------- -<P> -configFile -<TAB> -<TAB> -Specifies a URL that points to the filter -<P> -<TAB> -<TAB> -configuration file. -<TAB> -<TAB> -<TAB> -<TAB> -<TAB> -filter.conf -<P> -<P> -*testFile -<TAB> -<TAB> -Specifies a URL that points to the file that contains -<P> -<TAB> -<TAB> -a list of images that need to be tested. -<TAB> -<TAB> -<TAB> -testImages.conf -<P> -<P> -*testServer -<TAB> -Specifies the name of the test server. -<TAB> -<TAB> -<TAB> -siesta.cs.wustl.edu -<P> -<P> -*testPort -<TAB> -<TAB> -Specifies the port number of the test server. -<TAB> -<TAB> -<TAB> -7789 -<P> -<P> -*JAWSServer -<TAB> -Specifies the name of the server to use in -<P> -<TAB> -<TAB> -doing image uploading during testing. -<TAB> -<TAB> -<TAB> -siesta.cs.wustl.edu -<P> -<P> -*JAWSPort -<TAB> -Specifies the port number of the server to use -<P> -<TAB> -<TAB> -in doing image uploading during testing. -<TAB> -<TAB> -<TAB> -5432 -<P> -====================================================================== -<END> - -Menu ----- - -o Open URL - - Allows user to specify a URL. If the URL points to an image that is - readable, then the image is downloaded and displayed in the view - panel. - - If the URL points to a directory that is readable then a window - appears displaying a list of files in that directory. The user can - then click on an image file in this window to fetch an image. - - IMPORTANT NOTE: If the URL points to a directory, the directory must - not contain an "index.html" file! If it does, the - query will fail and no list of files will appear. - -o Save - - Allows user to specify a URL to save the currently loaded image to. - All images are saved in GIF format. Note that saving/uploading a - file can take a while depending upon the size of the image. This is - because, the tool first generates the GIF format and then sends the - bytes across the network. - - IMPORTANT NOTE: The Web server must support image uploading, that is - HTTP PUT functionality. Also, due to applet - restrictions, the server MUST be running on the same - host from which the applet was downloaded from. - -o Reset - - Resets the image to the original. Note that the effects of any - filters that were applied to the image will be lost. - -o Reload Filters - - Reads the filter configuration file again and reloads all the image - filters. Note that this serves as the trigger of the Service - Configurator pattern allowing the tool to reconfigure based on new - configuration information. - - The filters are specified in filter.conf. To add/remove filters, - change this file and then select "Reload Filters". - - To specify a different configuration file, please see "Getting Started". - -o Zoom In - - Zooms in to the currently displayed image. Note that the applet only - allows to zoom in 4 x times. - -o Zoom Out - - Zooms out of the currently displayed image. Note that the applet - only allows to zoom out 1/4 x times. - -o Apply - - Apply the currently selected filter. By default no filter is - selected. Note that applying a filter to an image can taken - anywhere between a few seconds to a few minutes depending upon the - image size, the filter type, and the speed of the machine on which - the applet is running. - -o Filters: - - Allows the user to select a filter from the ones that have been - configured into the applet. Note that this is a choice menu and its - entries depend upon the filters that were specified in the filter - configuration file. - - For more information, on how to specify the filters, please see - "Getting Started". - -o About - - Displays the "About" dialog containing the version of the MedJava - applet. - -o Help - - Displays this window - -====================================================================== - -Limitations ------------ - -In several browsers, for images larger than 100 KB, the Java virtual -machine may run out of memory while doing image processing. diff --git a/java/ImageProcessing/framework/test.html b/java/ImageProcessing/framework/test.html deleted file mode 100644 index 7a9acf34e38..00000000000 --- a/java/ImageProcessing/framework/test.html +++ /dev/null @@ -1,19 +0,0 @@ -<HTML> - -<BODY text = "#000000" -link="#000fff" -vlink="#ff0f0f" -bgcolor="#888888"> - -<HR> -<APPLET CODEBASE="../../classes" CODE="imaging.framework.ImageApp.class" width=700 height=700> -<param name=configFile value="http://www.cs.wustl.edu/~pjain/java/ACE_wrappers/java/ImageProcessing/framework/testFilter.conf"> -<param name=testFile value="http://www.cs.wustl.edu/~pjain/java/ACE_wrappers/java/ImageProcessing/framework/testImages.conf"> -<param name=testServer value="siesta.cs.wustl.edu"> -<param name=testPort value="7789"> -<param name=JAWSServer value="siesta.cs.wustl.edu"> -<param name=JAWSPort value="5432"> -</APPLET> -<HR> - -</HTML>
\ No newline at end of file diff --git a/java/ImageProcessing/framework/testFilter.conf b/java/ImageProcessing/framework/testFilter.conf deleted file mode 100644 index 2e90ea136ce..00000000000 --- a/java/ImageProcessing/framework/testFilter.conf +++ /dev/null @@ -1,15 +0,0 @@ -imaging.filters.EmbossFilter -imaging.filters.BleachFilter -imaging.filters.BlurFilter -imaging.filters.DarkenFilter -imaging.filters.DeSpeckleFilter -imaging.filters.EdgeDetectFilter -imaging.filters.OilPaintFilter -imaging.filters.PixelizeFilter -imaging.filters.RotateFilter -imaging.filters.SharpenFilter -imaging.filters.SpreadFilter - - - - |