domingo, 1 de noviembre de 2009

Imágenes en Java

En la Universidad programamos en Java, asi que he decidido agregar los apuntes que voy haciendo a lo largo de la carrera, asi hago una retroalimentación, ya que cuando reescribo mis apuntes me los aprendo más :D

En este caso escribiré como cargar las imágenes desde Java con el API que viene en el jdk de Sun.

En el ejemplo cargaremos una imagen en un JFrame. Como se ve en la figura de la derecha:



Entonces comencemos:

Imagenes en Java


Se mostrará como cargar y guardar un archivo de imagen en java, usando la librerias de la API de Java.
Es importante saber que el API se basa en el contenido del archivo. La Mayoria de las imagenes contiene un “Magic Number ” en sus primeros bytes que identifican el formato del archivo.
Las Clases Básicas que se usan para manipular imagenes desde son:
  • java.awt.Image
  • java.awt.image.BufferedImage
La Clase Image es abstracta, en sus metodos describe el funcionamiento de una Imagen.
La Clase BufferedImage se extiende de Image asi hereda todo el funcionamiente de la Clase Image.


Para cargar una imagen externa hacia tu programa java se debe usar la Clase Estatica ImageI/O. Donde contiene los metodos para escribir y leer imagenes desde un objeto File, URL, entre otros.
La clase ImageI/O reconoce el contenido de un archivo como el JPEG y lo decodifica en un BufferedImage que puede ser usado.

Cargar Imagen desde disco

En este ejemplo cargaremos imagen desde el disco duro, el archivo se llama “strawberry.JPG”.

Creamos en nuestro programa una variable de tipo BufferedImage , despues usaremos la clase estatica ImageIO donde contiene el metodo read(), este metodo esta sobrecargado ya que puede recibir por parametro un objeto File, InputStream, ImageInputStream o URL y nos devolverá un BufferedImage donde se encuentra la imagen.


BufferedImage img = null;
      try {
        img = ImageIO.read(new File("strawberry.JPG"));
      } catch (IOException ex) {
          System.out.println("No se pudo leer la imagen");
      }



Nota: Como sabemos la clase ImageIO es estatica, entonces no tenemos que inicializarla con el operador new.


Como vemos en el ejemplo creamos una variable de tipo BufferedImage donde le llamamos img:


 BufferedImage img = null;


Después desde la clase ImageIO llamamos al metodo estatico read(), donde le enviamos por parámetro un nuevo File con la direccion del archivo, en este caso a la imagen “strawbery.JPG”.


        img = ImageIO.read(new File("strawberry.JPG"));

Este método puede tener un error de entrada y salida de datos (IOException), asi que tendremos que capturar este error en un try catch().


BufferedImage img = null;
      try {
        img = ImageIO.read(new File("strawberry.JPG"));
      } catch (IOException ex) {
          System.out.println("No se pudo leer la imagen");
      }

Pero surge una pregunta, ¿En donde demonios voy a usar la clase BufferedImage?, pues como se dijo en el principio de este post, cargaremos una imagen en un JFrame, através del método paint que pertenece de la clase JFrame:

     public void paint(Graphics g)


Como se ve en metodo paint recibe por parámetro un objeto de tipo Graphics. La clase Graphics provee los métodos para trabajar con graficos, como dibujar lineas, ovalos, rectangulos, imagenes, etc. Aqui el metodo que nos importa es el metodo  


            Graphics g.drawImage(Image img, int x, int y, int width, int height, ImageObserver io);


En el método drawImage recibe por parámetro un objeto Image, después las coordenadas donde se posicionará la imagen, ancho, largo y por ultimo un objeto ImageObserver. 


La Clase BufferedImage se extiende la clase abstracta Image, por lo tanto se deduce que nuestra variable img de tipo BufferedImage puede pasarse por parámetro al metodo drawImage de Graphics g, donde a su vez es cuando se llama al método paint de la clase JFrame donde dibujara la imagen :D.


La implementacion de todo esto esta en el siguiente clase ImagenesBasico:


import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;


public class ImagenesBasico extends JFrame {

    private BufferedImage img = null;

    public ImagenesBasico() {
         super("Usando Imagenes"); //Llamamos al Contructor de JFrame
         leerImagen();
         setSize( 301,201 );
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setVisible(true);
    }

    /**

    * Método donde cargamos la imagen

    */
    public void leerImagen(){

        try {
            img = ImageIO.read(new File("strawberry.JPG"));
        } catch (IOException ex) {
            System.out.println("No se pudo leer la imagen");
        }
    }


    public void paint(Graphics g){
        g.drawImage(img, 10, 20,getWidth()-10, getHeight()-10, null);
    }


    public static void main(String[] args) {
        new ImagenesBasico();
    }
}



les dejo el codigo fuente y la imagen, ademas les anexo el Proyecto de Netbeans por si lo quieren abrir desde ese IDE,  es para que lo prueben: Codigo Fuente

Hasta aqui aprendimos a cargar una imagen desde el disco duro, en la proxima entrada escribiré como guardar una imagen en diferentes formatos.

Saludos y hasta luego...

sábado, 9 de mayo de 2009

Libros sobre GNU/Linux


Les dejo una serie de libros de los más completos de GNU/LINUX, que a más de uno les va servir, ya sea un usuario novato o un usuario avanzado.

Temas tomados por los libros:


  • Administracion en Redes
  • Administracion Basica de GNU/LINUX
  • Introduccion al Desarrollo de Software (En lenguajes C,C++ y Java)
  • Ingenieria en Software
  • Desarrollo Web en linux
  • Cuestiones Legales
  • Introduccion a GNU/Linux
  • Instalar Servidores Linux
  • Administración Avanzada de gnu/linux
  • temas de migración de Sistema

Se los recomiendo ampliamente espero les sirva...

LINK: http://cid-561d2d570dd7152b.skydrive.live.com/self.aspx/P%C3%BAblico/linux%5E_expert.rar

Estos libros estan bajo licencia GPL, asi que se libre para compartir la información

Saludos....

sábado, 2 de mayo de 2009

Una Breve Introduccion a Linux...

Linux es un Sistema Operativo de libre distribucion, que fue la unión del kernel creado por Linus Torvals, junto con Software del Proyecto GNU fundado por Richard Stallman. Por lo tanto ahora en adelante nos referiremos a Linux como "GNU/Linux o Gnu con Linux".

GNU/Linux es Software Libre y está sujeto bajo la licencia GPL (General Public License),con lo cual te derecho de COPIAR, MODIFICAR y REDISTRIBUIR el software a quien quieras. Ejemplos de esto sería:

  • Puedes Regalarle una copia de gnu con linux a un amigo o venderselo a tu primo.

  • Puedes Modificar el software a tus necesidades, ya que tienes derecho a su código fuente.

Esto es todo lo contrario a lo que te ofrecen empresas privativas como Microsoft, Apple, Norton. Ya que estas empresas solo te venden la licencia de uso y no tienes derecho al código fuente del programa. Además si no cumples con la licencia serás malo y te llamarán pirata, jejejeee.

Si les interesa saber más sobre GNU/Linux les dejo un enlace con un documental muy bueno sobre este tema: