You are on page 1of 6

PROCESO DE DIGITALIZACION DE IMGENES. Ajustar la intensidad de los colores en la imagen. Reducir el nmero de los distintos colores usados en la imagen.

La interface para completar el programa debe mostrar como la foto del ejemplo. El programa es una ventana que despliega tres botones de control. El primero carga la nueva imagen para procesar. Cuando es presentada, se abre una ventana de dialogo que permite al usuario seleccionar un archivo de imagen. Una vez que la imagen ha sido escogida, el usuario con un click puede escoger otra con el otro botn de la ms reciente imagen cargada. Cuando uno de los botones de proceso es presionado, se abre una nueva ventana que despliega la versin procesada de la imagen. Por ejemplo, si presiona el botn Requantize una ventana como la que se muestra en la otra imagen aparecer. Esta ventana despliega una versin de la imagen a 2 tonalidades negro y gris (el rol del indicador de desplazamiento determina cuantas tonalidades pueden ser usadas). Cuando el programa este completo, debe construirse una clase que despliegue la ventana con los botones de control y una clase adicional para cada una de las imgenes procesadas. Todas estas clases deben de llamar (extends) al GUIManager. La clase Histograma. Debe tambin definir una clase llamada Histograma que contenga un arreglo del nmero de pixeles que provee los datos usados para dibujar el histograma. El constructor debe crear un arreglo de 256 valores enteros. Debe incluir un loop que pueda examinar todos los elementos en el arreglo de pixeles, fijar cada uno de los 256 elementos del arreglo del histograma tal que los elementos del ndice b, que sean iguales al nmero de elementos de entradas en el arreglo de pixeles con b. La clase histograma debe proveer dos mtodos. Uno debe tomar el valor del brillo b, y regresar la posicin que b guardada en el arreglo del histograma. El otro mtodo debe regresar la longitud del arreglo del histograma. Esta labor es intenta que la funcin sea un manual. El handout provee las instrucciones detalladas de cmo construir este programa. Nos introduce en los detalles muchas libreras y mtodos, y explora una de las nuevas caractersticas del lenguaje java por si solo. Describe una nueva clse llamada SImage que soporta la manipulacin de imgenes. Nos explica como manipular tablas de valores que describen los pixeles individualmente utilizando una imagen, usando caractersticas de java al invocar a los arreglos. Adems, nos introduce a numerosas libreras e Java Swing library. Nos muestra como usar JLabels para desplegar imgenes. Nos presenta una nueva clase llamada JFileChooser. Cuando se presiona el botn para Cargar Imagen en la interface del programa, facilita usar al programa la habilidad de navegar alrededor de los archivos del sistema para encontrar los archivos de imgenes. La clsse JFileChoser hace fcil hacer esto. Finalmente, la operacin para el procesamiento de imgenes que deseamos implementar para ser controlada por los componentes del GUI como un dispositivo de desplazamiento, nos permite insertar la clase JSlIder en esta labor.

Paso 1: Acezando y desplegando la imagen.


En principio, construiremos un programa que solo despliegue uno de tres botones que aparecern en control de la ventana del programa final, el botn de cargar imagen. Primero. Usamos BlueJ para agregar una nueva clase GUIManager llamada ImageViewer en el proyecto. Borrar todas las ocurrencias de los mtodos de manipular GUI que BlueJ suministra en la plantilla GUIMananger exepto por el mtodo ButtonClicked. Agregar las dos import libreras o Import.java.awt.*; o Import.java. Al comienzo del nuevo archivo. Agregar al cdigo para desplegar dos componentes GUI: JLabel que despliega un mensaje corto (Hola que puedo hacer) y JButton con una etiqueta Cargar Imagen. Asociar las variables entre s JLABEL y JButton. S bien es el nico botn por ahora, Eventualmente incorporar en JPanel los tres botones, y esperamos que todos se desplieguen juntos. Correr el programa si estamos seguros que despliega las etiquetas y los botones deseados. Ahora, deseamos agregar el cdigo al mtodo buttonClicked que de hecho carga y despliega una imagen finalmente, la persona que pruebe el programa debe ser seleccionar cualquier archivo de imagen, pero por ahora escribiremos solo el cdigo que siempre con el que cargaremos siempre las imgenes guardadas en los archivos AllImages/MMM.gif. Hay dos pasos que se necesitan para ejecutar en buttonClicked que despliega esta imagen en la ventana del programa. Primero, le tienes que decir a java que convierta los datos en un archivo de imagen en el objeto tal que pueda ser usado par describir la imagen dentro del programa. Podemos hacer esto construyendo un objeto de una nueva clase llamada SImage. Se pude hacer un nuevo constructor SImage que incluya el nombre del archivo en el disco con los caractersticas del constructor. Despues puedes cargar la imagen en el programa y declarar las variables de tipo SImage y agregar los atributos de la siguiente forma: someImageVariable= new SImage (../AllImages/MMM.gif ); al mtodo buttonClicked. La variable SImage debe ser declarada como una variable instancia. Aunque solo se pude usar una en el mtodo buttonClicked, en este momento, se extiende esa clase definida que soporte el ajuste de niveles y otro botn, necesitamos recordar los datos de la imagen entre los botones clicks. Segundo, le tenemos que decir a java que despliegue la imagen con el componente GUI en la ventana del programa. Ese es el porque tenemos incluido a JLabel en la interface del programa. JLabel despliega una pieza del texto, se puede usar el mtodo llamado setIcon para hacer a JLabel despliegue a SImage. As, una instruccin que nos muestra algo como esto: someJLabel.setIcon( someImageVariable );

Debe ser incluida en el mtodo buttonClicked que llame a java para que despliegue la imagen cargada. Agregar las variables y la instancia SImage variable descrita arriba del programa. Correr el programa y hacer click en el botn Load Image.

S no se hace todo bien, el programa desplegara una imagen de uno de los maestros . Puedes ver el parecido familiar?. Si hacemos todo bien, notaremos que nuestra interface del programa tiene algunos inconvenientes .S se estrecha la ventana, hacindola larga o corta, puedes notar que cuando es muy pequea, no es espacio suficiente para desplegar el botn y cuando es muy larga, puedes ver el texto desplegado en la JLabel mas la imagen. Hay que hacer los siguientes cambios en la direccin de estos casos. Cambiar el texto desplegado en el JLabel a una cadena vacia (). Mete el JLabel por new JScrollPane tal que rejas puedan ser provistas cuando la ventana es muy pequea. Esto es una instruccin de la siguiente forma: contentPane.add( new JScrollPane( yourLabel)); Agregarla a la ventana. Cambiar la distribucin principal asociada con el contenido del panel esta al borde de la distribucin principal y ejecutar las tres siguientes pasos despus intentar correr el programa otra vez. o Agregar la instruccin. contentPane.setLayout( new BorederLayout() ); Para empezar el constructor del programa. Colocar JLabel al centro de la ventana que remplace el comando de agregarlo en el contenido del panel, con las instrucciones de la siguiente forma: contentPan.add( , BorderLayout.CENTER );

Cambia el comando de agregar a JPanel que contiene el botn de Load Image que el panel es colocado en el botn de la ventana (BorderLayout.SOUTH).

Corre el programa modificado. Las cosas debe verse muy bien ahora. Las nicas cuestiones pendientes es que cuando la ventana es ancha mas de lo requerido para desplegar la imagen, la imagen pude ser justificada a la izquierda propiamente que en al centro de la misma. Se puede arreglar el problema, agregando un segundo parmetro al constructor de JLabel asi como describe: New JLabel( , SwingConstats.CENTER)

Este parmetro adicional le dice a label que centre su contenido. Si se corre el programa despus de este cambio debe desplegar la imagen justo al centro.

Paso 2. Usando JFileChooser.


Ahora que se puede desplegar archivos del tipo MMM.gif, deberamos hacer el programa suficientemente flexible para desplegar cualquier tipo de archivo. Swing provee a la clase llamada JFilesChooser hacer las cosas as de fciles como esto. Declarar la variable de instancia de la siguiente forma o privarte JFileChooser choser = new JFileChooser( System.getProperty(user.dir)) + //AllImages ); En la clase ImageViewer. Declarar o chooser.showOpenDialog( this ); Despus del cdigo del mtodo buttonClicked que carga la figura MMM.gif. Cambia la expresin ../AllImages/MMM.gif usada en los parmetros del constructor SImage por la expresin. o Chooser.getSelectedFile().getAbsolutePath() Corre el programa y presiona el botn Load Image la caja de dialogo aparecer. Selecciona el archivo de imagen que desea usar en caja de dialogo.

La declaracin de la variable nos dice que agrega, le dice a java que cree un archivo chooser. Invoca el mtodo shwOpenDialog y tiene por objeto desplegar la caja de dialogo y espera la usuario a seleccionar el archivo. El parmetro New.File(System.getProperty(user.dir)) + //AllImages Provee que cuando el chooser llama a java el dialogo debe desplegarse al principio, contenida en el folder que contiene a todas las imgenes que tienes que bajar desde el curso de la pagina web ( nombre del archivo, significa que sube un nivel jerarqua de de los folders ) La invocacin es Chooser.getSectedFile().get AbsolutePath() Regresa una descripcin de los archivos seleccionados por el usuario. Cuando corras el programa, puedes notar una cosa, que se debe direccionar si deseamos que el programa slido. La caja de dialogo tiene un archivo chooser incluido que es el botn Cancela. Si el usuario presiona cancel, entonces el mtodo getSelectedFile pude no regresar una descripcin del archivo. Facilitar esta situacin, de que el mtodo showOpenDialog regres el valor indicando, en todo caso es seleccionado por el usuario. El valor regresado cuando es seleccionado es asociado con el nombre JFileChooser.APPROVE_OPTION, por eso se debe combinar la lnea que invoca showOpenDialog y el cdigo que trae a la imagen creada y tiene la siguiente forma: If ( chooser.showOpenDialog(this)==JFileChooser.APPROVE.OPTION) {

..// }

codigo para traer y desplegar la imagen

Paso 3: Slider deslizable


La imagen con el botn de la primera pagina, nos muestra una vetana contenida en componente GUIy, y no le habamos dado un uso, el JSider. JSlider es un componente que provee un camino simple para el usuario grficamente seleccione el valor, deslizando la perilla dentro de un intervalo definido. El slider en el ejemplo de la ventana de la primera pagina permite escoger lo que el usuario determina en cuanto a los tonos de grises que pueden ser usados para la imagen desplegada. Permite que el slider, desea implementar un programa que use al slider como un camino sofisticado. La interface del programa que deseamos escribir se muestra a la derecha. Su propsito es simple, asignar un nmero entre 0 y 100 usando el JSlider y deslpelgar el numero seleccionado. El nmero seleccionado es determinado por la posicin relativa por la perilla del slider. En la figura de la derecha, la perilla esta alrededor un tercio del camino entre la izquierda y el slider, el valor desplegado es 33, que esta entre 0 y 100. Para implementar el botn de la nueva clase que extend GUImANAGE. Mientra deseamos escribir programa autnomo, que es la labor que buscamos, incorporar este cdigo como un subcomponente el programa de proceso de imagen descrito a principio. Este subcomponente servir como botn de ajuste de nivel. De acuerdo, demos nombrar a la nueva clase como AdjustLevel. Se puede borrar el manejo de mtodos de la plantilla como bLUEj que povee a la clase. Y agregar esta importante declaracin java.awt.*. Es usual, empecemos por escribiendo el constructor que despliegue los elementos bsicos del programa de interfaz sin actualizar realmente este trabajo. Este programa despliega cuatro componentes. En medio de la pantalla despliega el valor actual del slider que no es parte de JSlider mismo. Que es independiente de JLabel. El slider que aparece entre 0 y 100 es miembro de la clase JSlider Se debe asociar una instancia de varaiables llamadas como JLabel que desplieguen el posicin actual del slider (33 en la ilustracin) y el JSlider. El cosntructor del JSlider prev tres parmetros enteros. Los primeros dos especifican el rango de valores asociado con la posicin del control del slider. Deseamos que el slider describa un numero entre 0 y 100, estos valores son usados en los dos primeros caractersticas. La ultima caracterstica especifica el valor inicial del slider. Podemos dar comienzo con el slider central. Debemos usar la instruccin de esta forma: New JSlider (0, 100, 50) Para crear el programa del slider. Asociar la instancia de la variable con el slider despus de hacer o aplicar el mtodo slider que determine su valor actual. Se menciona abajo, podemos adaptar el cdigo escrito ahora por otras propuestas. En particular, debemos cambiar el rango de valores asociados con el slider en la versin anterior de este programa. El resultado cuando se crea JLabel que apareca antes y despus del slider, debe no ser como este:

New.JLabel (100); Debemos recordar replazar la palabra 100, despus . Una mejor aproximacin es tomar ventaja del hecho de quela clase JSlider provee un mtodo llamado get Minimun y get Maximo que se usan para determinar el rango del slider Por lo que si someSlider tenia nombre de JSlider, el constructor JLabel, el constructor JLabel debe parecerse a : New JLabel( +someSlider.getMaximun()) El nico truco para crear esta interfaz del programa en traer

You might also like