summaryrefslogtreecommitdiff
path: root/j2kviewer/src/ImageViewer.java
diff options
context:
space:
mode:
Diffstat (limited to 'j2kviewer/src/ImageViewer.java')
-rw-r--r--j2kviewer/src/ImageViewer.java222
1 files changed, 222 insertions, 0 deletions
diff --git a/j2kviewer/src/ImageViewer.java b/j2kviewer/src/ImageViewer.java
new file mode 100644
index 00000000..1eabc60d
--- /dev/null
+++ b/j2kviewer/src/ImageViewer.java
@@ -0,0 +1,222 @@
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import java.awt.image.*;
+import java.awt.geom.*;
+import java.net.URL;
+import javax.swing.border.*;
+import java.util.*;
+import java.io.*;
+
+public class ImageViewer extends JApplet
+{
+ private class zoomLevel {
+ int x1, y1, x2, y2, zf;
+
+ zoomLevel() {}
+ zoomLevel(zoomLevel zl)
+ {
+ x1 = zl.x1;
+ y1 = zl.y1;
+ x2 = zl.x2;
+ y2 = zl.y2;
+ zf = zl.zf;
+ }
+ }
+
+ private BufferedImage bi;
+ private Graphics2D big;
+ private MML myMML;
+ private int iw, ih;
+ private int selected = 0, imgId;
+ private Image img;
+ private PgmImage pgm = new PgmImage();
+ private String cmdline = new String();
+ private static String hostname;
+ private static boolean isApplet = true;
+ private boolean fullRefresh = false;
+ private Point offset = new Point(0,0);
+ private zoomLevel zl = new zoomLevel();
+ private Rectangle rect = new Rectangle();
+ private Stack zoomStack = new Stack();
+ private static String j2kfilename;
+
+ public int getX() { return offset.x; }
+ public int getY() { return offset.y; }
+ public int getWidth() { return iw; }
+ public int getHeight() { return ih; }
+
+ public void destroy()
+ {
+ }
+
+ public void zoomIn()
+ {
+ Dimension asz = this.getSize();
+ int maxzf = 3;
+ int coef = 1;
+ int r;
+
+ cmdline =
+ "/bin/sh get.sh " + j2kfilename + " " + iw
+ + " " + ih + " " + rect.x + " " + rect.y + " "
+ + rect.width + " " + rect.height;
+ Exec.execPrint(cmdline);
+
+ rect.x = rect.y = rect.width = rect.height = 0;
+
+ img = pgm.open("out.pgm");
+
+ iw = img.getWidth(this);
+ ih = img.getHeight(this);
+ bi = new BufferedImage(iw, ih, BufferedImage.TYPE_INT_RGB);
+ big = bi.createGraphics();
+ selected = 0;
+ fullRefresh = true;
+ repaint();
+ }
+
+ public void zoomOut()
+ {
+ }
+
+ public void init()
+ {
+ String str;
+ int port;
+
+ imgId = 4;
+ if (isApplet && (((hostname = this.getParameter("hostname")) == null)
+ || hostname.equals("")))
+ hostname = "localhost";
+ if (!isApplet || ((str = this.getParameter("cmdPort")) == null)) {
+ port = 3000;
+ } else {
+ port = new Integer(str).intValue();
+ }
+
+ this.setSize(512, 512);
+ Dimension asz = this.getSize();
+ zl.x2 = asz.width;
+ zl.y2 = asz.height;
+
+ cmdline =
+ "/bin/sh get.sh " + j2kfilename + " " + asz.width
+ + " " + asz.height + " " + zl.x1 + " " + zl.y1 + " "
+ + zl.x2 + " " + zl.y2;
+ Exec.execPrint(cmdline);
+ img = pgm.open("out.pgm");
+
+ iw = img.getWidth(this);
+ ih = img.getHeight(this);
+
+ setBackground(Color.black);
+ bi = new BufferedImage(iw, ih, BufferedImage.TYPE_INT_RGB);
+ big = bi.createGraphics();
+ myMML = new MML(this);
+ addMouseListener(myMML);
+ addMouseMotionListener(myMML);
+ }
+
+ public void setSelected(int state)
+ {
+ if (state != selected) {
+ selected = state;
+ repaint();
+ }
+ }
+
+ public boolean isInsideRect(int x, int y)
+ {
+ return rect.contains(x - offset.x, y - offset.y);
+ }
+
+ public void setRGeom(int x1, int y1, int x2, int y2)
+ {
+ rect.x = Math.min(x1,x2) - offset.x;
+ rect.y = Math.min(y1,y2) - offset.y;
+ rect.width = Math.abs(x2-x1);
+ rect.height = Math.abs(y2-y1);
+ }
+
+ public void paint(Graphics g)
+ {
+ Graphics2D g2 = (Graphics2D) g;
+ Dimension asz = this.getSize();
+
+ if (fullRefresh) {
+ g2.clearRect(0, 0, asz.width, asz.height);
+ fullRefresh = false;
+ }
+ g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+ RenderingHints.VALUE_ANTIALIAS_ON);
+ g2.setRenderingHint(RenderingHints.KEY_RENDERING,
+ RenderingHints.VALUE_RENDER_QUALITY);
+ big.setColor(Color.black);
+ offset.x = (int) (asz.width - iw) / 2;
+ offset.y = (int) (asz.height - ih) / 2;
+ big.drawImage(img, 0, 0, this);
+ big.setPaint(Color.red);
+ if ((rect.width > 0) && (rect.height > 0))
+ big.draw(rect);
+ if (selected == 1)
+ shadeExt(big, 0, 0, 0, 64);
+ else if (selected == 2) {
+ shadeExt(big, 0, 0, 0, 255);
+ selected = 1;
+ }
+ g2.drawImage(bi, offset.x, offset.y, this);
+ }
+
+ private void shadeRect(Graphics2D g2, int r, int g, int b, int a)
+ {
+ g2.setPaint(new Color(r, g, b, a));
+ g2.fillRect(rect.x + 1, rect.y + 1, rect.width - 1, rect.height - 1);
+ }
+
+ private void shadeExt(Graphics2D g2, int r, int g, int b, int a)
+ {
+ g2.setPaint(new Color(r, g, b, a));
+ g2.fillRect(0, 0, iw, rect.y); /* _N_ */
+ g2.fillRect(rect.x + rect.width + 1, rect.y,
+ iw - rect.x - rect.width - 1, rect.height + 1); /* E */
+ g2.fillRect(0, rect.y, rect.x, rect.height + 1); /* W */
+ g2.fillRect(0, rect.y + rect.height + 1,
+ iw, ih - rect.y - rect.height - 1); /* _S_ */
+ }
+
+ protected URL getURL(String filename)
+ {
+ URL codeBase = this.getCodeBase();
+ URL url = null;
+
+ try {
+ url = new URL(codeBase, filename);
+ } catch (java.net.MalformedURLException e) {
+ System.out.println("Couldn't create image: badly specified URL");
+ return null;
+ }
+
+ return url;
+ }
+
+ public static void main(String s[])
+ {
+ if (s.length > 0)
+ j2kfilename = s[0];
+ else
+ j2kfilename = "girl";
+ System.out.println(j2kfilename);
+ isApplet = false;
+ JFrame f = new JFrame("ImageViewer");
+ f.addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {System.exit(0);}
+ });
+ JApplet applet = new ImageViewer();
+ f.getContentPane().add("Center", applet);
+ applet.init();
+ f.pack();
+ f.setSize(new Dimension(550,550));
+ f.show();
+ }
+}