Java nos muestra una imagen

•octubre 28, 2009 • Dejar un comentario

Buenas tardes:

Por fin he conseguido que Java sea capaz de mostrarnos una imagen. La primera dificultad que he encontrado es que pensaba que iba a ser más sencillo, que existiría algún objeto mágico al que le dijeras la ruta de la imagen a cargar y un método show que se encargara de mostrar la imagen por pantalla. Pero esto no es así.

Somos nosotros los que tenemos que ocuparnos de crear la ventana, y dentro de ella hemos de crear un objeto de tipo Component (bueno, realmente uno que herede de Component) que será nuestra imagen.

En este nuevo objeto que hereda de Component (que llamaremos Component de ahora en adelante) tenemos que redefinir obligatoriamente un método, el método paint, que será el que se encargue de dibujarlo (dado que cuando se pinta la ventana, se llama individualmente a los métodos paint de todos los objetos Component).

Además, en mi caso también he redefinido otro método, el método getPreferredSize, que se encarga de devolver el tamaño preferido del objeto Component. Esto lo he hecho porque como tenemos que construir la ventana desde cero, hemos de indicarle el tamaño de la misma. Esto se puede hacer de forma explícita, indicándole ancho y alto mediante el método setSize o bien de forma implícita mediante el método pack, que se encarga de ajustar el tamaño de la ventana para que se adapte a los objetos Component que tenga dentro, conociendo el tamaño preferido del objeto Component mediante el método getPreferredSize.

Este programa lo he desarrollado bajo Vim, pero posteriormente he creado un proyecto en Eclipse cargando mis archivos fuente y ha funcionado sin ningún problema, con la salvedad de que la imagen a cargar debe de ir en la raíz del proyecto, porque si guardas la imagen en el directorio src o bin del proyecto, pese a que se ejecute el programa ya compilado en bin, hay que indicarle la ruta de la imagen completa, por ejemplo “bin/imagen.jpg”, mientras que si se encuentra la imagen en la raíz del proyecto es suficiente con llamarla mediante “imagen.jpg”. Esto imagino que será debido a que Eclipse ejecuta los programas de Java desde la raíz del proyecto, es decir, mediante el comando “java bin/programa”, por lo tanto los recursos se cargan a partir de la raíz del proyecto. Si se ejecutasen mediante “java programa” los recursos se cargarían a partir del directorio bin.

La próxima estación será reducir el tamaño de la imagen para luego devolverla al tamaño original, obteniendo bloques grandes de colores. Algo que comunmente se denomina pixelar la imagen.

Presentación

•octubre 27, 2009 • 1 comentario

Buenos días:

Este va a ser el blog para seguir el desarrollo de mi Proyecto Fin de Carrera. En él trataré el problema de la Recuperación de Imágenes basada en Contenido (en inglés Content-Based Image Retrieval -CBIR-). Bajo estas palabras se esconden diferentes métodos para encontrar una imagen entre una base de datos de imágenes, o bien entre un vídeo. Existen varias técnicas de recuperacion basada en contenido. Una de ellas es la denominada “Query by example” (Consulta mediante ejemplos), que se basa en proveer al sistema una imagen y éste se encargará de encontrarla entre todas las imágenes de la base de datos. Otra, que será en la que me base, se trata de recuperación semántica, que difiere de la consulta mediante ejemplos en que en vez de proveer una imagen, se proveerá una o varias palabras, y el sistema buscará imágenes que contengan lo que hemos indicado semánticamente.

Como lenguaje voy a usar Java, pero lo que no acabo de tener muy claro es qué IDE usaré. Existen dos que me interesan, que son Eclipse y NetBeans. Pese a que anteriormente ya había programado en Java, lo había hecho utilizando Vim, un editor de texto bastante simple en apariencia pero muy potente por debajo. El por qué no lo voy a usar para mi proyecto es que nunca he trabajado con él en proyectos grandes (siempre programas con 3 ó 4 archivos fuente), y me parecen más sencillos para manejar muchos archivos cualquiera de los dos IDE ya nombrados.

Mi primer acercamiento a estos IDE va a ser un programa en Java que muestre una imagen. Pero esa historia ya será contada en otra entrada ;)