From 9837e019712b87615154435016cca39dc7f75cee Mon Sep 17 00:00:00 2001 From: Kaori Hagihara Date: Tue, 10 May 2011 16:43:20 +0000 Subject: [PATCH] opj_viewer removed the xml functions (for users without Xersus2), opj_viewer_xerces is the copy of the original viewer ( needs Xersus2) --- applications/jpip/CHANGES | 2 + .../jpip/opj_client/opj_viewer/build.xml | 35 ++ .../opj_client/opj_viewer/dist/manifest.txt | 4 + .../opj_viewer/dist/opj_viewer-20110510.jar | Bin 0 -> 14851 bytes .../opj_client/opj_viewer/dist/opj_viewer.jar | 1 + .../opj_viewer/src/ImageManager.java | 99 ++++++ .../opj_viewer/src/ImageViewer.java | 267 ++++++++++++++++ .../opj_viewer/src/ImageWindow.java | 93 ++++++ .../opj_viewer/src/ImgdecClient.java | 268 ++++++++++++++++ .../opj_viewer/src/JPIPHttpClient.java | 301 ++++++++++++++++++ .../jpip/opj_client/opj_viewer/src/MML.java | 116 +++++++ .../opj_client/opj_viewer/src/PnmImage.java | 141 ++++++++ .../opj_viewer/src/RegimViewer.java | 115 +++++++ .../opj_viewer/src/ResizeListener.java | 59 ++++ .../opj_client/opj_viewer_xerces/build.xml | 35 ++ .../opj_viewer_xerces/dist/manifest.txt | 5 + .../dist/opj_viewer_xerces-20110510.jar | Bin 0 -> 19361 bytes .../dist/opj_viewer_xerces.jar | 1 + .../opj_viewer_xerces/src/ImageManager.java | 1 + .../opj_viewer_xerces/src/ImageViewer.java | 267 ++++++++++++++++ .../opj_viewer_xerces/src/ImageWindow.java | 93 ++++++ .../opj_viewer_xerces/src/ImgdecClient.java | 1 + .../opj_viewer_xerces/src/JP2XMLparser.java | 122 +++++++ .../opj_viewer_xerces/src/JPIPHttpClient.java | 1 + .../opj_client/opj_viewer_xerces/src/MML.java | 1 + .../opj_viewer_xerces/src/OptionPanel.java | 98 ++++++ .../opj_viewer_xerces/src/PnmImage.java | 1 + .../opj_viewer_xerces/src/RegimViewer.java | 1 + .../opj_viewer_xerces/src/ResizeListener.java | 1 + 29 files changed, 2129 insertions(+) create mode 100644 applications/jpip/opj_client/opj_viewer/build.xml create mode 100644 applications/jpip/opj_client/opj_viewer/dist/manifest.txt create mode 100644 applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20110510.jar create mode 120000 applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar create mode 100644 applications/jpip/opj_client/opj_viewer/src/ImageManager.java create mode 100644 applications/jpip/opj_client/opj_viewer/src/ImageViewer.java create mode 100644 applications/jpip/opj_client/opj_viewer/src/ImageWindow.java create mode 100644 applications/jpip/opj_client/opj_viewer/src/ImgdecClient.java create mode 100644 applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java create mode 100644 applications/jpip/opj_client/opj_viewer/src/MML.java create mode 100644 applications/jpip/opj_client/opj_viewer/src/PnmImage.java create mode 100644 applications/jpip/opj_client/opj_viewer/src/RegimViewer.java create mode 100644 applications/jpip/opj_client/opj_viewer/src/ResizeListener.java create mode 100644 applications/jpip/opj_client/opj_viewer_xerces/build.xml create mode 100644 applications/jpip/opj_client/opj_viewer_xerces/dist/manifest.txt create mode 100644 applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20110510.jar create mode 120000 applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces.jar create mode 120000 applications/jpip/opj_client/opj_viewer_xerces/src/ImageManager.java create mode 100644 applications/jpip/opj_client/opj_viewer_xerces/src/ImageViewer.java create mode 100644 applications/jpip/opj_client/opj_viewer_xerces/src/ImageWindow.java create mode 120000 applications/jpip/opj_client/opj_viewer_xerces/src/ImgdecClient.java create mode 100644 applications/jpip/opj_client/opj_viewer_xerces/src/JP2XMLparser.java create mode 120000 applications/jpip/opj_client/opj_viewer_xerces/src/JPIPHttpClient.java create mode 120000 applications/jpip/opj_client/opj_viewer_xerces/src/MML.java create mode 100644 applications/jpip/opj_client/opj_viewer_xerces/src/OptionPanel.java create mode 120000 applications/jpip/opj_client/opj_viewer_xerces/src/PnmImage.java create mode 120000 applications/jpip/opj_client/opj_viewer_xerces/src/RegimViewer.java create mode 120000 applications/jpip/opj_client/opj_viewer_xerces/src/ResizeListener.java diff --git a/applications/jpip/CHANGES b/applications/jpip/CHANGES index 8744dcf8..a3a92ce9 100644 --- a/applications/jpip/CHANGES +++ b/applications/jpip/CHANGES @@ -6,6 +6,8 @@ What's New for OpenJPIP + : added May 10, 2011 +! [kaori] opj_viewer removed the xml functions (for users without Xersus2) ++ [kaori] renamed opj_viewer to opj_viewer_xerces ( needs Xersus2) ! [kaori] Modification of opj_dec_server to be portable to windows May 9, 2011 diff --git a/applications/jpip/opj_client/opj_viewer/build.xml b/applications/jpip/opj_client/opj_viewer/build.xml new file mode 100644 index 00000000..0608132a --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer/build.xml @@ -0,0 +1,35 @@ + + OpenJPIP client image viewer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/applications/jpip/opj_client/opj_viewer/dist/manifest.txt b/applications/jpip/opj_client/opj_viewer/dist/manifest.txt new file mode 100644 index 00000000..537c33dd --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer/dist/manifest.txt @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 +Ant-Version: Apache Ant 1.7.0 +Created-By: Kaori Hagihara +Main-Class: ImageWindow diff --git a/applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20110510.jar b/applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20110510.jar new file mode 100644 index 0000000000000000000000000000000000000000..a4ac470a79117fea69ba6892d342a8ae8a8e964a GIT binary patch literal 14851 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%0D9)~1Iq|}5v46!9atWX<{>NO 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 literal 0 HcmV?d00001 diff --git a/applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar b/applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar new file mode 120000 index 00000000..3f6bf194 --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar @@ -0,0 +1 @@ +opj_viewer-20110510.jar \ No newline at end of file diff --git a/applications/jpip/opj_client/opj_viewer/src/ImageManager.java b/applications/jpip/opj_client/opj_viewer/src/ImageManager.java new file mode 100644 index 00000000..f3d01bef --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer/src/ImageManager.java @@ -0,0 +1,99 @@ +/* + * $Id$ + * + * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2011, Professor Benoit Macq + * Copyright (c) 2010-2011, Kaori Hagihara + * 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. + */ + +import java.awt.Image; + +public class ImageManager extends JPIPHttpClient +{ + private PnmImage pnmimage; + + public ImageManager( String uri) + { + super( uri); + pnmimage = null; + } + + public int getOrigWidth(){ return pnmimage.width;} + public int getOrigHeight(){ return pnmimage.height;} + + public Image getImage( String j2kfilename, int reqfw, int reqfh) + { + System.err.println(); + + String refcid = ImgdecClient.query_cid( j2kfilename); + byte[] jptstream; + + if( refcid == null) + jptstream = super.requestViewWindow( j2kfilename, reqfw, reqfh, true); + else + jptstream = super.requestViewWindow( reqfw, reqfh, refcid, true); + + System.err.println( "decoding to PNM image"); + pnmimage = ImgdecClient.decode_jptstream( jptstream, j2kfilename, cid, fw, fh); + System.err.println( " done"); + + // System.out.println( "fw: " + fw + " fh: " + fh + "pnm w: "); + + return pnmimage.createROIImage( rx, ry, rw, rh); + } + + public Image getImage( int reqfw, int reqfh, int reqrx, int reqry, int reqrw, int reqrh) + { + System.err.println(); + + byte[] jptstream = super.requestViewWindow( reqfw, reqfh, reqrx, reqry, reqrw, reqrh); + + System.err.println( "decoding to PNM image"); + pnmimage = ImgdecClient.decode_jptstream( jptstream, cid, fw, fh); + System.err.println( " done"); + + return pnmimage.createROIImage( rx, ry, rw, rh); + } + + public byte[] getXML() + { + System.err.println(); + + byte []xmldata = null; + byte[] jptstream = super.requestXML(); + + if( jptstream != null){ + ImgdecClient.send_JPTstream( jptstream); + + xmldata = ImgdecClient.get_XMLstream( cid); + } + return xmldata; + } + public void closeChannel() + { + ImgdecClient.destroy_cid( cid); + super.closeChannel(); + } +} \ No newline at end of file diff --git a/applications/jpip/opj_client/opj_viewer/src/ImageViewer.java b/applications/jpip/opj_client/opj_viewer/src/ImageViewer.java new file mode 100644 index 00000000..fe6f7eb4 --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer/src/ImageViewer.java @@ -0,0 +1,267 @@ +/* + * $Id$ + * + * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2011, Professor Benoit Macq + * Copyright (c) 2010-2011, Kaori Hagihara + * 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. + */ + +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 JPanel +{ + private MML myMML; + private ResizeListener myRL; + private ImageManager imgmanager; + private int vw, vh; + private int iw, ih; + private int selected = 0; + private Image img; + + private String cmdline = new String(); + private boolean fullRefresh = false; + private Point offset = new Point(0,0); + private Rectangle rect = new Rectangle(); + private Rectangle roirect[] = null; + private String roiname[] = null; + + public ImageViewer( String j2kfilename, ImageManager manager) + { + String str; + + this.setSize( 200, 200); + Dimension asz = this.getSize(); + + vw = asz.width; + vh = asz.height; + + setBackground(Color.black); + myMML = new MML(this); + myRL = new ResizeListener(this); + + imgmanager = manager; + img = imgmanager.getImage( j2kfilename, vw, vh); + + addMouseListener(myMML); + addMouseMotionListener(myMML); + addComponentListener(myRL); + } + + public Image getImage() + { + return img; + } + + public void zoomIn() + { + roirect = null; + roiname = null; + + double scalex = vw/(double)rect.width; + double scaley = vh/(double)rect.height; + + int fw = (int)(imgmanager.getFw()*scalex); + int fh = (int)(imgmanager.getFh()*scaley); + int rx = (int)((imgmanager.getRx()+rect.x)*scalex); + int ry = (int)((imgmanager.getRy()+rect.y)*scaley); + + img = imgmanager.getImage( fw, fh, rx, ry, vw, vh); + + rect.x = rect.y = rect.width = rect.height = 0; + + selected = 0; + fullRefresh = true; + repaint(); + } + + public void enlarge() + { + roirect = null; + roiname = null; + + Dimension asz = this.getSize(); + + vw = asz.width; + vh = asz.height; + + double scalex = vw/(double)imgmanager.getRw(); + double scaley = vh/(double)imgmanager.getRh(); + + int fw = (int)(imgmanager.getFw()*scalex); + int fh = (int)(imgmanager.getFh()*scaley); + int rx = (int)(imgmanager.getRx()*scalex); + int ry = (int)(imgmanager.getRy()*scaley); + + img = imgmanager.getImage( fw, fh, rx, ry, vw, vh); + + fullRefresh = true; + repaint(); + } + + public void setSelected(int state) + { + roirect = null; + roiname = null; + + 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 annotate( JP2XMLparser.ROIparams roi[]) + // { + // int numofroi = roi.length; + + // roirect = new Rectangle [numofroi]; + // roiname = new String [numofroi]; + + // double scale_x = imgmanager.getFw()/(double)imgmanager.getOrigWidth(); + // double scale_y = imgmanager.getFh()/(double)imgmanager.getOrigHeight(); + // int rx = imgmanager.getRx(); + // int ry = imgmanager.getRy(); + // int rw = imgmanager.getRw(); + // int rh = imgmanager.getRh(); + + // for( int i=0; i 0) && (rect.height > 0)) + big.draw(rect); + + if( roirect != null){ + for( int i=0; i 0){ + uri = s[0]; + j2kfilename = s[1]; + } + else{ + System.out.println("Usage: java -jar opj_viewer.jar HTTP_server_URI imagefile.jp2"); + return; + } + ImageWindow frame = new ImageWindow( uri, j2kfilename); + + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + //Display the window. + frame.pack(); + frame.setSize(new Dimension(400,200)); + frame.setLocation( 0, 50); + frame.setVisible(true); + } +} diff --git a/applications/jpip/opj_client/opj_viewer/src/ImgdecClient.java b/applications/jpip/opj_client/opj_viewer/src/ImgdecClient.java new file mode 100644 index 00000000..80e8f8ba --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer/src/ImgdecClient.java @@ -0,0 +1,268 @@ +/* + * $Id$ + * + * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2011, Professor Benoit Macq + * Copyright (c) 2010-2011, Kaori Hagihara + * 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. + */ + +import java.io.*; +import java.net.*; + +public class ImgdecClient{ + + public static PnmImage decode_jptstream( byte[] jptstream, String cid, int fw, int fh) + { + if( jptstream != null) + send_JPTstream( jptstream); + return get_PNMstream( cid, fw, fh); + } + + public static PnmImage decode_jptstream( byte[] jptstream, String j2kfilename, String cid, int fw, int fh) + { + send_JPTstream( jptstream, j2kfilename, cid); + return get_PNMstream( cid, fw, fh); + } + + public static void send_JPTstream( byte[] jptstream) + { + try{ + Socket imgdecSocket = new Socket( "localhost", 5000); + DataOutputStream os = new DataOutputStream( imgdecSocket.getOutputStream()); + DataInputStream is = new DataInputStream( imgdecSocket.getInputStream()); + + System.err.println("Sending " + jptstream.length + "Data Bytes to decodingServer"); + + os.writeBytes("JPT-stream\n"); + os.writeBytes("version 1.0\n"); + os.writeBytes( jptstream.length + "\n"); + os.write( jptstream, 0, jptstream.length); + + byte signal = is.readByte(); + + if( signal == 0) + System.err.println(" failed"); + } catch (UnknownHostException e) { + System.err.println("Trying to connect to unknown host: " + e); + } catch (IOException e) { + System.err.println("IOException: " + e); + } + } + + public static void send_JPTstream( byte[] jptstream, String j2kfilename, String cid) + { + try{ + Socket imgdecSocket = new Socket( "localhost", 5000); + DataOutputStream os = new DataOutputStream( imgdecSocket.getOutputStream()); + DataInputStream is = new DataInputStream( imgdecSocket.getInputStream()); + int length = 0; + + if( jptstream != null) + length = jptstream.length; + + System.err.println("Sending " + length + "Data Bytes to decodingServer"); + + os.writeBytes("JPT-stream\n"); + os.writeBytes("version 1.0\n"); + os.writeBytes( j2kfilename + "\n"); + os.writeBytes( cid + "\n"); + os.writeBytes( length + "\n"); + os.write( jptstream, 0, length); + + byte signal = is.readByte(); + + if( signal == 0) + System.err.println(" failed"); + } catch (UnknownHostException e) { + System.err.println("Trying to connect to unknown host: " + e); + } catch (IOException e) { + System.err.println("IOException: " + e); + } + } + + public static PnmImage get_PNMstream( String cid, int fw, int fh) + { + PnmImage pnmstream = new PnmImage(); + try { + Socket imgdecSocket = new Socket( "localhost", 5000); + DataOutputStream os = new DataOutputStream( imgdecSocket.getOutputStream()); + DataInputStream is = new DataInputStream( imgdecSocket.getInputStream()); + byte []header = new byte[7]; + + os.writeBytes("PNM request\n"); + os.writeBytes( cid + "\n"); + os.writeBytes( fw + "\n"); + os.writeBytes( fh + "\n"); + + read_stream( is, header, 7); + + if( header[0] == 80){ + // P5: gray, P6: color + byte magicknum = header[1]; + if( magicknum == 5 || magicknum == 6){ + int length; + boolean iscolor = magicknum==6 ? true:false; + if( iscolor) + pnmstream.channel = 3; + else + pnmstream.channel = 1; + pnmstream.width = (header[2]&0xff)<<8 | (header[3]&0xff); + pnmstream.height = (header[4]&0xff)<<8 | (header[5]&0xff); + int maxval = header[6]&0xff; + + if( maxval == 255){ + length = pnmstream.width*pnmstream.height*pnmstream.channel; + pnmstream.data = new byte [ length]; + read_stream( is, pnmstream.data, length); + } + else + System.err.println("Error in get_PNMstream(), only 255 is accepted"); + } + else + System.err.println("Error in get_PNMstream(), wrong magick number" + header[1]); + } + else + System.err.println("Error in get_PNMstream(), Not starting with P"); + os.close(); + is.close(); + imgdecSocket.close(); + } catch (UnknownHostException e) { + System.err.println("Trying to connect to unknown host: " + e); + } catch (IOException e) { + System.err.println("IOException: " + e); + } + return pnmstream; + } + + public static byte [] get_XMLstream( String cid) + { + byte []xmldata = null; + + try{ + Socket imgdecSocket = new Socket( "localhost", 5000); + DataOutputStream os = new DataOutputStream( imgdecSocket.getOutputStream()); + DataInputStream is = new DataInputStream( imgdecSocket.getInputStream()); + byte []header = new byte[5]; + + os.writeBytes("XML request\n"); + os.writeBytes( cid + "\n"); + + read_stream( is, header, 5); + + if( header[0] == 88 && header[1] == 77 && header[2] == 76){ + int length = (header[3]&0xff)<<8 | (header[4]&0xff); + + xmldata = new byte[ length]; + read_stream( is, xmldata, length); + } + else + System.err.println("Error in get_XMLstream(), not starting with XML"); + } catch (UnknownHostException e) { + System.err.println("Trying to connect to unknown host: " + e); + } catch (IOException e) { + System.err.println("IOException: " + e); + } + return xmldata; + } + + public static String query_cid( String j2kfilename) + { + String cid = null; + + try{ + Socket imgdecSocket = new Socket( "localhost", 5000); + DataOutputStream os = new DataOutputStream( imgdecSocket.getOutputStream()); + DataInputStream is = new DataInputStream( imgdecSocket.getInputStream()); + byte []header = new byte[4]; + + os.writeBytes("CID request\n"); + os.writeBytes( j2kfilename + "\n"); + + read_stream( is, header, 4); + + if( header[0] == 67 && header[1] == 73 && header[2] == 68){ + int length = header[3]&0xff; + + if( length > 0){ + + byte []ciddata = new byte[ length]; + read_stream( is, ciddata, length); + cid = new String( ciddata); + } + } + else + System.err.println("Error in query_cid(), not starting with CID"); + } + catch (UnknownHostException e) { + System.err.println("Trying to connect to unknown host: " + e); + } catch (IOException e) { + System.err.println("IOException: " + e); + } + + return cid; + } + + public static void read_stream( DataInputStream is, byte []stream, int length) + { + int remlen = length; + int off = 0; + + try{ + while( remlen > 0){ + int redlen = is.read( stream, off, remlen); + + if( redlen == -1){ + System.err.println(" failed to read_stream()"); + break; + } + off += redlen; + remlen -= redlen; + } + } catch (IOException e) { + System.err.println("IOException: " + e); + } + } + + public static void destroy_cid( String cid) + { + try{ + Socket imgdecSocket = new Socket( "localhost", 5000); + DataOutputStream os = new DataOutputStream( imgdecSocket.getOutputStream()); + DataInputStream is = new DataInputStream( imgdecSocket.getInputStream()); + + os.writeBytes("CID destroy\n"); + os.writeBytes( cid + "\n"); + + byte signal = is.readByte(); + + if( signal == 0) + System.err.println(" failed"); + } catch (UnknownHostException e) { + System.err.println("Trying to connect to unknown host: " + e); + } catch (IOException e) { + System.err.println("IOException: " + e); + } + } +} diff --git a/applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java b/applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java new file mode 100644 index 00000000..c8f04714 --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java @@ -0,0 +1,301 @@ +/* + * $Id$ + * + * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2011, Professor Benoit Macq + * Copyright (c) 2010-2011, Kaori Hagihara + * 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. + */ + +import java.net.*; +import java.io.*; +import java.util.*; + + +public class JPIPHttpClient +{ + private String comURL; + protected int fw, fh; + protected int rx, ry; + protected int rw, rh; + protected String cid; + + public JPIPHttpClient( String URI) + { + comURL = URI + "?"; + fw = fh = -1; + rx = ry = -1; + rw = rh = -1; + cid = null; + } + + public int getFw(){ return fw;} + public int getFh(){ return fh;} + public int getRx(){ return rx;} + public int getRy(){ return ry;} + public int getRw(){ return rw;} + public int getRh(){ return rh;} + + public byte[] requestViewWindow( int reqfw, int reqfh) + { + if( cid != null) + return requestViewWindow( reqfw, reqfh, cid); + else + return null; + } + + public byte[] requestViewWindow( int reqfw, int reqfh, int reqrx, int reqry, int reqrw, int reqrh) + { + if( cid != null) + return requestViewWindow( reqfw, reqfh, reqrx, reqry, reqrw, reqrh, cid); + else + return null; + } + + public byte[] requestViewWindow( int reqfw, int reqfh, String reqcid) + { + return requestViewWindow( null, reqfw, reqfh, -1, -1, -1, -1, reqcid, false); + } + + public byte[] requestViewWindow( int reqfw, int reqfh, int reqrx, int reqry, int reqrw, int reqrh, String reqcid) + { + return requestViewWindow( null, reqfw, reqfh, reqrx, reqry, reqrw, reqrh, reqcid, false); + } + + public byte[] requestViewWindow( String target, int reqfw, int reqfh) + { + return requestViewWindow( target, reqfw, reqfh, -1, -1, -1, -1, null, false); + } + + public byte[] requestViewWindow( String target, int reqfw, int reqfh, boolean reqcnew) + { + if( cid == null) // 1 channel allocation only + return requestViewWindow( target, reqfw, reqfh, -1, -1, -1, -1, null, reqcnew); + else + return null; + } + + public byte[] requestViewWindow( String target, int reqfw, int reqfh, int reqrx, int reqry, int reqrw, int reqrh) + { + return requestViewWindow( target, reqfw, reqfh, reqrx, reqry, reqrw, reqrh, null, false); + } + + + public byte[] requestViewWindow( int reqfw, int reqfh, String reqcid, boolean reqcnew) + { + return requestViewWindow( null, reqfw, reqfh, -1, -1, -1, -1, reqcid, reqcnew); + } + + public byte[] requestViewWindow( String target, + int reqfw, int reqfh, + int reqrx, int reqry, + int reqrw, int reqrh, + String reqcid, boolean reqcnew) + { + String urlstring = const_urlstring( target, reqfw, reqfh, reqrx, reqry, reqrw, reqrh, reqcid, reqcnew); + return GETrequest( urlstring); + } + + public byte[] requestXML() + { + String urlstring = comURL; + + if( cid == null) + return null; + + urlstring = urlstring.concat( "cid=" + cid); + urlstring = urlstring.concat( "&metareq=[xml_]"); + + return GETrequest( urlstring); + } + + private byte[] GETrequest( String urlstring) + { + int buflen = 0; + URL url = null; + HttpURLConnection urlconn = null; + byte[] jptstream = null; + + try{ + url = new URL( urlstring); + + System.err.println("Requesting: " + url); + + urlconn = (HttpURLConnection)url.openConnection(); + urlconn.setRequestMethod("GET"); + urlconn.setInstanceFollowRedirects(false); + urlconn.connect(); + + Map> headers = urlconn.getHeaderFields(); + java.util.List hvaluelist; + + if(( hvaluelist = headers.get("JPIP-fsiz")) != null){ + String hvalueline = hvaluelist.get(0); + fw = Integer.valueOf( hvalueline.substring( 0, hvalueline.indexOf(','))).intValue(); + fh = Integer.valueOf( hvalueline.substring( hvalueline.indexOf(',')+1 )).intValue(); + + System.err.println("fw,fh: " + fw + "," + fh); + } + + if(( hvaluelist = headers.get("JPIP-roff")) != null){ + String hvalueline = hvaluelist.get(0); + rx = Integer.valueOf( hvalueline.substring( 0, hvalueline.indexOf(','))).intValue(); + ry = Integer.valueOf( hvalueline.substring( hvalueline.indexOf(',')+1 )).intValue(); + System.err.println("rx,ry: " + rx + "," + ry); + } + + if(( hvaluelist = headers.get("JPIP-rsiz")) != null){ + String hvalueline = hvaluelist.get(0); + rw = Integer.valueOf( hvalueline.substring( 0, hvalueline.indexOf(','))).intValue(); + rh = Integer.valueOf( hvalueline.substring( hvalueline.indexOf(',')+1 )).intValue(); + System.err.println("rw,rh: " + rw + "," + rh); + } + + if(( hvaluelist = headers.get("JPIP-cnew")) != null){ + String hvalueline = hvaluelist.get(0); + cid = hvalueline.substring( hvalueline.indexOf('=')+1, hvalueline.indexOf(',')); + System.err.println("cid: " + cid); + } + + InputStream input = urlconn.getInputStream(); + buflen = input.available(); + + if( buflen > 0){ + ByteArrayOutputStream tmpstream = new ByteArrayOutputStream(); + byte[] buf = new byte[ 1024]; + + System.err.println("reading jptstream..."); + + int redlen; + do{ + redlen = input.read( buf); + + if( redlen == -1) + break; + tmpstream.write( buf, 0, redlen); + }while( redlen > 0); + + buflen = tmpstream.size(); + + jptstream = tmpstream.toByteArray(); + + tmpstream = null; + + System.err.println("jptlen: " + buflen); + System.err.println(" succeeded"); + } + else{ + System.err.println("No new jptstream"); + } + input.close(); + } + catch ( MalformedURLException e){ + e.printStackTrace(); + } + catch ( ProtocolException e){ + e.printStackTrace(); + } + catch( ClassCastException e){ + e.printStackTrace(); + } + catch( NullPointerException e){ + e.printStackTrace(); + } + catch( UnknownServiceException e){ + e.printStackTrace(); + } + catch ( IOException e){ + e.printStackTrace(); + } + + urlconn.disconnect(); + + return jptstream; + } + + private String const_urlstring( String target, + int reqfw, int reqfh, + int reqrx, int reqry, + int reqrw, int reqrh, + String reqcid, boolean reqcnew) + { + String urlstring = comURL; + + if( target != null){ + if( !urlstring.endsWith("?")) + urlstring = urlstring.concat( "&"); + urlstring = urlstring.concat( "target=" + target); + } + if( reqfw != -1 && reqfh != -1){ + if( !urlstring.endsWith("?")) + urlstring = urlstring.concat( "&"); + urlstring = urlstring.concat( "fsiz=" + reqfw + "," + reqfh); + } + if( reqrx != -1 && reqry != -1){ + if( !urlstring.endsWith("?")) + urlstring = urlstring.concat( "&"); + urlstring = urlstring.concat( "roff=" + reqrx + "," + reqry); + } + if( reqrw != -1 && reqrh != -1){ + if( !urlstring.endsWith("?")) + urlstring = urlstring.concat( "&"); + urlstring = urlstring.concat( "rsiz=" + reqrw + "," + reqrh); + } + if( reqcid != null){ + if( !urlstring.endsWith("?")) + urlstring = urlstring.concat( "&"); + urlstring = urlstring.concat( "cid=" + reqcid); + } + if( reqcnew){ + if( !urlstring.endsWith("?")) + urlstring = urlstring.concat( "&"); + urlstring = urlstring.concat( "cnew=http"); + } + return urlstring; + } + + public void closeChannel() + { + if( cid == null) + return; + + try{ + URL url = new URL( comURL + "cclose=" + cid); + System.err.println( "closing cid: " + cid); + + HttpURLConnection urlconn = (HttpURLConnection)url.openConnection(); + urlconn.setRequestMethod("GET"); + urlconn.setInstanceFollowRedirects(false); + urlconn.connect(); + + Map headers = urlconn.getHeaderFields(); + + urlconn.disconnect(); + } catch ( MalformedURLException e){ + e.printStackTrace(); + } catch ( IOException e){ + e.printStackTrace(); + } + } +} diff --git a/applications/jpip/opj_client/opj_viewer/src/MML.java b/applications/jpip/opj_client/opj_viewer/src/MML.java new file mode 100644 index 00000000..983ff200 --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer/src/MML.java @@ -0,0 +1,116 @@ +/* + * $Id$ + * + * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2011, Professor Benoit Macq + * Copyright (c) 2010-2011, Kaori Hagihara + * 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. + */ + +import java.awt.event.*; + +class MML implements MouseMotionListener, MouseListener +{ + public void mouseExited(MouseEvent e) {} + public void mouseEntered(MouseEvent e) {} + public void mouseClicked(MouseEvent e) {} + + private ImageViewer iv; + private int x1, y1, x2, y2, zf, btn; + private boolean zoomrq; + + public MML(ImageViewer imageviewer) + { + x1 = y1 = -1; + iv = imageviewer; + zoomrq = false; + zf = 0; + } + + private boolean isInside(int x, int y) + { + x -= iv.getX(); + y -= iv.getY(); + return (x >= 0) && (x < iv.getWidth()) + && (y >= 0) && (y < iv.getHeight()); + } + + public void mousePressed(MouseEvent e) + { + btn = e.getButton(); + + if( iv.hasAnnotation()){ + if( iv.isInsideROIRect(e.getX(), e.getY())){ + iv.zoomIn(); + System.out.println("annotation click"); + return; + } + } + if (iv.isInsideRect(e.getX(), e.getY())) { + iv.setSelected(2); + iv.repaint(); + zoomrq = true; + } else { + iv.setRGeom(0, 0, 0, 0); + iv.setSelected(0); + iv.repaint(); + x1 = y1 = -1; + } + } + + public void mouseReleased(MouseEvent e) + { + if(e.getButton() == 1) { + if (zoomrq) { + iv.zoomIn(); + zoomrq = false; + } + } + } + + public void mouseMoved(MouseEvent e) + { + } + + public void mouseDragged(MouseEvent e) + { + if (btn == 1) { + x2 = e.getX(); + y2 = e.getY(); + + iv.setSelected(0); + zoomrq = false; + + if (isInside(x2, y2)) { + if (x1 == -1) { + x1 = x2; + y1 = y2; + } else { + iv.setRGeom(x1, y1, x2, y2); + iv.repaint(); + } + } + } + } +} diff --git a/applications/jpip/opj_client/opj_viewer/src/PnmImage.java b/applications/jpip/opj_client/opj_viewer/src/PnmImage.java new file mode 100644 index 00000000..5fdfb608 --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer/src/PnmImage.java @@ -0,0 +1,141 @@ +/* + * $Id$ + * + * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2011, Professor Benoit Macq + * Copyright (c) 2010-2011, Kaori Hagihara + * 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. + */ + +import java.awt.*; +import java.awt.image.*; +import java.io.*; +import java.util.regex.*; + +public class PnmImage extends Component +{ + public byte[] data = null; + public int width = 0; + public int height = 0; + public int channel = 0; + + public Image createROIImage( int rx, int ry, int rw, int rh) + { + int []pix = new int[ rw*rh]; + + for( int i=0; i 0){ + try { + r = is.read(data, offset, bytes); + if( r == -1){ + System.err.println(" failed to read()"); + break; + } + offset += r; + bytes -= r; + } + catch (IOException e) { e.printStackTrace(); } + } + fis.close(); + } catch (IOException e) { e.printStackTrace(); } + } +} \ No newline at end of file diff --git a/applications/jpip/opj_client/opj_viewer/src/RegimViewer.java b/applications/jpip/opj_client/opj_viewer/src/RegimViewer.java new file mode 100644 index 00000000..85beb533 --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer/src/RegimViewer.java @@ -0,0 +1,115 @@ +/* + * $Id$ + * + * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2011, Professor Benoit Macq + * Copyright (c) 2010-2011, Kaori Hagihara + * 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.geom.AffineTransform; + +public class RegimViewer extends JPanel +{ + private PnmImage refpnm; + private int vw, vh; + private Image refimg; + private Image jpipImg; + private double[] affine_matrix; + private AffineTransform affine; + + public RegimViewer( String refname, double[] mat) + { + refpnm = new PnmImage(); + refpnm.openimage(refname.replaceFirst("jp2", "pgm")); // decoding not realized + affine_matrix = new double[6]; + + affine_matrix[0] = mat[0]; + affine_matrix[1] = mat[3]; + affine_matrix[2] = mat[1]; + affine_matrix[3] = mat[4]; + affine_matrix[4] = mat[2]; + affine_matrix[5] = mat[5]; + + affine = new AffineTransform(); + + for( int i=0; i<3; i++){ + for( int j=0; j<3; j++) + System.out.print( mat[i*3+j] + " "); + System.out.println(); + } + } + + public void projection( Image jpipimg, double scale) + { + jpipImg = jpipimg; + refimg = refpnm.createScaleImage( scale); + vw = refimg.getWidth(this); + vh = refimg.getHeight(this); + this.setSize( vw, vh); + + affine.setTransform( affine_matrix[0], affine_matrix[1], affine_matrix[2], affine_matrix[3], affine_matrix[4], affine_matrix[5]); + repaint(); + } + + public void paint(Graphics g) + { + int iw, ih; + BufferedImage bi, bi2; + Graphics2D big, big2; + Graphics2D g2 = (Graphics2D) g; + + g2.clearRect(0, 0, vw, vh); + + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + g2.setRenderingHint(RenderingHints.KEY_RENDERING, + RenderingHints.VALUE_RENDER_QUALITY); + + iw = refimg.getWidth(this); + ih = refimg.getHeight(this); + + bi = new BufferedImage( iw, ih, BufferedImage.TYPE_INT_RGB); + big = bi.createGraphics(); + big.drawImage(refimg, 0, 0, this); + + g2.drawImage(bi, 0, 0, this); + + bi2 = new BufferedImage( jpipImg.getWidth(this), jpipImg.getHeight(this), BufferedImage.TYPE_INT_RGB); + big2 = bi2.createGraphics(); + big2.drawImage( jpipImg, 0, 0, this); + + g2.setTransform(affine); + + g2.drawImage(bi2, 0, 0, this); + } + + public Dimension get_imsize() + { + return (new Dimension( vw, vh)); + } +} \ No newline at end of file diff --git a/applications/jpip/opj_client/opj_viewer/src/ResizeListener.java b/applications/jpip/opj_client/opj_viewer/src/ResizeListener.java new file mode 100644 index 00000000..28688c1b --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer/src/ResizeListener.java @@ -0,0 +1,59 @@ +/* + * $Id$ + * + * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2011, Professor Benoit Macq + * Copyright (c) 2010-2011, Kaori Hagihara + * 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. + */ + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +class ResizeListener implements ComponentListener +{ + private ImageViewer iv; + private Dimension largest; + + public ResizeListener( ImageViewer _iv) + { + iv = _iv; + largest = iv.getSize(); + } + + public void componentHidden(ComponentEvent e) {} + + public void componentMoved(ComponentEvent e) {} + + public void componentResized(ComponentEvent e) { + Dimension cursize = iv.getSize(); + if( largest.getWidth() < cursize.getWidth() || largest.getHeight() < cursize.getHeight()){ + largest = cursize; + iv.enlarge(); + } + } + + public void componentShown(ComponentEvent e) {} +} \ No newline at end of file diff --git a/applications/jpip/opj_client/opj_viewer_xerces/build.xml b/applications/jpip/opj_client/opj_viewer_xerces/build.xml new file mode 100644 index 00000000..08a177f4 --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer_xerces/build.xml @@ -0,0 +1,35 @@ + + OpenJPIP client image viewer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/applications/jpip/opj_client/opj_viewer_xerces/dist/manifest.txt b/applications/jpip/opj_client/opj_viewer_xerces/dist/manifest.txt new file mode 100644 index 00000000..6bba2ab8 --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer_xerces/dist/manifest.txt @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +Ant-Version: Apache Ant 1.7.0 +Created-By: Kaori Hagihara +Main-Class: ImageWindow +Class-Path: /usr/share/java/xerces-j2.jar diff --git a/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20110510.jar b/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20110510.jar new file mode 100644 index 0000000000000000000000000000000000000000..07304bb8e1592d8dbd9f56eb34954a7fdad8b340 GIT binary patch literal 19361 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 0) && (rect.height > 0)) + big.draw(rect); + + if( roirect != null){ + for( int i=0; i 0){ + uri = s[0]; + j2kfilename = s[1]; + } + else{ + System.out.println("Usage: java -jar opj_viewer.jar HTTP_server_URI imagefile.jp2"); + return; + } + ImageWindow frame = new ImageWindow( uri, j2kfilename); + + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + //Display the window. + frame.pack(); + frame.setSize(new Dimension(400,200)); + frame.setLocation( 0, 50); + frame.setVisible(true); + } +} \ No newline at end of file diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/ImgdecClient.java b/applications/jpip/opj_client/opj_viewer_xerces/src/ImgdecClient.java new file mode 120000 index 00000000..e3d2ed4a --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer_xerces/src/ImgdecClient.java @@ -0,0 +1 @@ +../../opj_viewer/src/ImgdecClient.java \ No newline at end of file diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/JP2XMLparser.java b/applications/jpip/opj_client/opj_viewer_xerces/src/JP2XMLparser.java new file mode 100644 index 00000000..bec1d4db --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer_xerces/src/JP2XMLparser.java @@ -0,0 +1,122 @@ +/* + * $Id$ + * + * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2011, Professor Benoit Macq + * Copyright (c) 2010-2011, Kaori Hagihara + * 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. + */ + +import org.w3c.dom.Attr; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXParseException; +import org.xml.sax.ErrorHandler; +import org.apache.xerces.parsers.DOMParser; +import org.xml.sax.InputSource; +import java.io.*; +import java.lang.Integer; + +public class JP2XMLparser +{ + Document document; + + public static class ROIparams{ + public String name = null; + public int x = 0; + public int y = 0; + public int w = 0; + public int h = 0; + } + + public static class IRTparams{ + public String refimg = null; + public double []mat = { 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; + } + + public JP2XMLparser( byte[] buf) + { + try{ + InputSource source = new InputSource( new ByteArrayInputStream( buf)); + DOMParser parser = new DOMParser(); + parser.setErrorHandler(new MyHandler()); + parser.parse( source); + document = parser.getDocument(); + } + catch (Exception e) { + e.printStackTrace(); + } + } + + public ROIparams [] getROIparams() + { + ROIparams roi[]; + NodeList elements = document.getElementsByTagName("roi"); + int elementCount = elements.getLength(); + + roi = new ROIparams [elementCount]; + + for( int i = 0; i < elementCount; i++) { + Element element = (Element)elements.item(i); + + roi[i] = new ROIparams(); + roi[i].name = element.getAttribute( "name"); + roi[i].x = Integer.parseInt( element.getAttribute( "x")) ; + roi[i].y = Integer.parseInt( element.getAttribute( "y")) ; + roi[i].w = Integer.parseInt( element.getAttribute( "w")) ; + roi[i].h = Integer.parseInt( element.getAttribute( "h")) ; + } + return roi; + } + + public IRTparams getIRTparams() + { + IRTparams irt = new IRTparams(); + NodeList elements = document.getElementsByTagName("irt"); + int elementCount = elements.getLength(); + + Element element = (Element)elements.item(0); + irt.refimg = element.getAttribute( "refimg"); + for( int i=1; i<=9; i++) + irt.mat[i-1] = Double.parseDouble( element.getAttribute("m" + i)); + + return irt; + } +} + +class MyHandler implements ErrorHandler { + public void warning(SAXParseException e) { + System.out.println("Warning: line" + e.getLineNumber()); + System.out.println(e.getMessage()); + } + public void error(SAXParseException e) { + System.out.println("Error: line" + e.getLineNumber()); + System.out.println(e.getMessage()); + } + public void fatalError(SAXParseException e) { + System.out.println("Critical error: line" + e.getLineNumber()); + System.out.println(e.getMessage()); + } +} \ No newline at end of file diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/JPIPHttpClient.java b/applications/jpip/opj_client/opj_viewer_xerces/src/JPIPHttpClient.java new file mode 120000 index 00000000..98cdaa66 --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer_xerces/src/JPIPHttpClient.java @@ -0,0 +1 @@ +../../opj_viewer/src/JPIPHttpClient.java \ No newline at end of file diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/MML.java b/applications/jpip/opj_client/opj_viewer_xerces/src/MML.java new file mode 120000 index 00000000..9f1f5002 --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer_xerces/src/MML.java @@ -0,0 +1 @@ +../../opj_viewer/src/MML.java \ No newline at end of file diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/OptionPanel.java b/applications/jpip/opj_client/opj_viewer_xerces/src/OptionPanel.java new file mode 100644 index 00000000..822e2dd8 --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer_xerces/src/OptionPanel.java @@ -0,0 +1,98 @@ +/* + * $Id$ + * + * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2011, Professor Benoit Macq + * Copyright (c) 2010-2011, Kaori Hagihara + * 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. + */ + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +public class OptionPanel extends JPanel implements ActionListener +{ + private JButton roibutton; + private JButton imregbutton; + private ImageManager imgmanager; + private ImageViewer iv; + private JP2XMLparser xmlparser; + private JFrame regimwindow; + private RegimViewer regimgviewer; + + public OptionPanel( ImageManager manager, ImageViewer imgviewer) + { + this.setLayout(new BoxLayout( this, BoxLayout.Y_AXIS)); + + roibutton = new JButton("Region Of Interest"); + imregbutton = new JButton("Image Registration"); + + roibutton.setAlignmentX( Component.CENTER_ALIGNMENT); + imregbutton.setAlignmentX( Component.CENTER_ALIGNMENT); + + add( roibutton); + add( imregbutton); + roibutton.addActionListener(this); + imregbutton.addActionListener(this); + + imgmanager = manager; + iv = imgviewer; + xmlparser = null; + } + + public void actionPerformed(ActionEvent e) + { + if( xmlparser == null){ + byte []xmldata = imgmanager.getXML(); + if( xmldata != null) + xmlparser = new JP2XMLparser( xmldata); + } + if( e.getSource() == roibutton){ + if( xmlparser != null){ + JP2XMLparser.ROIparams roi[] = xmlparser.getROIparams(); + iv.annotate( roi); + } + } + if( e.getSource() == imregbutton){ + if( xmlparser != null){ + if( regimwindow == null){ + JP2XMLparser.IRTparams irt = xmlparser.getIRTparams(); + + regimgviewer = new RegimViewer( irt.refimg, irt.mat); + regimgviewer.setOpaque(false); + + regimwindow = new JFrame("Registered Image"); + regimwindow.getContentPane().add("Center", regimgviewer); + regimwindow.pack(); + regimwindow.setLocation( 500, 50); + regimwindow.setVisible(true); + } + regimgviewer.projection( iv.getImage(), (double)imgmanager.getRw()/(double)imgmanager.getOrigWidth()); + regimwindow.setSize( regimgviewer.get_imsize()); + regimwindow.show(); + } + } + } +} \ No newline at end of file diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/PnmImage.java b/applications/jpip/opj_client/opj_viewer_xerces/src/PnmImage.java new file mode 120000 index 00000000..73f70bff --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer_xerces/src/PnmImage.java @@ -0,0 +1 @@ +../../opj_viewer/src/PnmImage.java \ No newline at end of file diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/RegimViewer.java b/applications/jpip/opj_client/opj_viewer_xerces/src/RegimViewer.java new file mode 120000 index 00000000..c6be6518 --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer_xerces/src/RegimViewer.java @@ -0,0 +1 @@ +../../opj_viewer/src/RegimViewer.java \ No newline at end of file diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/ResizeListener.java b/applications/jpip/opj_client/opj_viewer_xerces/src/ResizeListener.java new file mode 120000 index 00000000..a09e32c1 --- /dev/null +++ b/applications/jpip/opj_client/opj_viewer_xerces/src/ResizeListener.java @@ -0,0 +1 @@ +../../opj_viewer/src/ResizeListener.java \ No newline at end of file