##### ###### ##### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##### ## ## ##### #### # ## ###### ## ## ## ## ## # ## ## ## ## # ## # # ## ## ## ## ## ## #### # ## ## ## #### # #### ##### ## ####### #### ## ####### ###### ####### ## # JP2Viewer Juan Pablo Garcia Ortiz maxx271079@hotmail.com Descripcion ----------- Visualizador en Java de imagenes JPEG2000 remotas a través del protocolo HTTP/1.1. Las imagenes deben estar en formato J2C (raw) y deben tener las caracteristicas siguientes: + Deben contener un único tile + Deben tener una progresion RLCP + Deben tener un tile-part por resolucion + En cada tile-part deben tener marcadores PLT con la informacion de cada paquete + En la cabecera pincipal debe tener marcadores TLM con la informacion de cada tile-part Además, el servidor HTTP donde se alojen las imagenes debe soportar el protocolo HTTP/1.1 con capacidad para el byte-ranging. Con el fin de un optimo funcionamiento el servidor debe soportar conexiones persistentes. Se recomienda que las imagenes tengan ademas las siguientes caracteristicas: + Poseer un numero elevado de capas de calidad + Tener precintos de un tamaño pequeño, por ejemplo, de 64x64 o 128x128 Contenido del directorio ------------------------ resources Recursos del programa (imagenes, cursores, etc.) classes Directorio donde se almacenara el resultado de la compilacion (los .class) src Codigo fuente, incluyendo las clases Java de la biblioteca kakadu meta-inf Directorio con el archivo manifest.mf para la generacion del .jar dlls Contiene las bibliotecas de enlace dinamico de Kakadu 4.0 para Windows (.dll) Proyecto.jpx Proyecto para JBuilder 6 makeall.bat Compila el programa y construye el .jar clear.bat Elimina el resultado de la ultima compilacion run.bat Ejecuta el .jar. readme.txt Este mismo archivo Ejecucion --------- Para ejecutar en Windows: Las bibliotecas incluidas en el directorio dlls se deben copiar a algún directorio donde las pueda encontrar el sistema operativo (por ejemplo, para Windows 9x, en C:\windows\system32). Para ejecutar en Linux: Para poder ejecutar el programa en Linux habria que compilar la biblioteca de Kakadu para generar las correspondientes versiones para Linux (que serian, si no me equivoco, kdu_jni.so y kdu_v40.so, para la version 4.0 de Kakadu). Los scripts makeall.bat y run.bat funcionarian perfectamente en Linux (o eso creo). Tan solo habria que modificar ligeramente el clear.bat. Si se quisiera crear un Makefile correspondiente, la tarea seria algo trivial. Clases ------ Debido a que no se ha incluido gran cantidad de comentarios en el codigo fuente :-((, aunque el mismo es bastante claro, se ha incluido aqui una breve descripcion de la funcion de cada clase Java del codigo fuente del programa (evidentemente, no se describen las clases de la biblioteca Kakadu): + JP2Reader El sistema de comunicacion encargado de comunicarse con el servidor para recibir el contenido necesario de una imagen para reconstruir una region determinada. + JP2Render.java El sistema de descompresion encargado de reconstruir una región determinada de una imagen. + HTTPReader.java Cliente HTTP especialmente implementado para el byte-ranging de archivos. Permite dos modos de funcionamiento, secuencial, cuando la lectura del archivo va a ser mayormente secuencial, y no secuencial, cuando se va acceder al archivo de forma aleatoria. Contiene una parte de codigo comentada que permite limitar la transferencia a 4Kb/s. + JP2Image.java Es la clase base para el trabajo con imagenes JPEG2000. + JP2ImageView.java Define una vista o region sobre una imagen (JP2Image). Se utilizan objetos de esta clase, vistas, para definir las regiones a reconstruir de una imagen. + Mutex.java Implementa un mecanismo para proporcionar la exclusion mutua en el codigo. + ImagePanel.java Define el panel principal de la interfaz de usuario a traves del cual el usuario interacciona con la imagen. + JP2Cache.java Deriva de la clase Kdu_cache de la biblioteca Kakadu, y añade funcionalidad a la misma. + JP2Exception.java Excepcion asociada al procesamiento de la imagen. + HTTPException.java Excepcion asociada a la comunicacion a traves del protocolo HTTP/1.1. + ImageWindow.java Interfaz que debe implementar cualquier ventana destinada a mostrar imagenes JPEG2000 a traves del panel ImagePanel. + JP2Viewer.java Es la clase principal de la aplicacion. Se encarga de realizar las inicializaciones necesarias para la aplicacion y lanzar la ventana principal. + JP2ViewerWindow.java Define la ventana principal de la aplicacion. Implementa la interfaz ImageWindow. + PacketData.java Contiene la informacion de un paquete de la imagen, tal como el offset del archivo donde de encuentra, el tamaño en bytes y el precinto al cual pertenece. + Properties.java Clase base para acceder a los recursos de la aplicacion. + ProyectoProperties.java Clase derivada de la anterior diseñada para acceder a los recursos propios de la aplicacion, tales como los iconos, los cursores, etc. + StrBuffer.java Esta clase es empleada por la clase HTTPReader para almacenar las cadenas ASCII. Al compilarla aparecera un mensaje indicando que contiene metodos "deprecated", pero esto ha sido totalmente intencionado. Se diseño esta clase con el fin de eliminar ciertas deficiencias de las clases String y StringBuffer. + CustomFileFilter.java Define un filtro necesario para mostrar el dialogo para la apertura de imagenes locales.