Capturar webcam con VB.NET

¿Que haremos? Crearemos una aplicación en Visual Studio, la cual hará uso de una webcam para capturar el video en frames independientes y depositarlos en memoria para despues mostralos al usuario a través de un picturebox y un Timer para crear la ilusión de movimiento. ¿Porque lo haremos? Porque es justo y necesario ¿Que necesitamos? [...]

Envío de correo con JavaMail/Netbeans

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el protocolo SMTP (Simple Mail Transfer Protocol) así como los distintos tipos de conexión con servidores de correo -TLS, SSL, autentificación con usuario y password, etc [Según SantaWikipedia] ¿Qué necesitamos? JavaMail 1.4.5 Java y Netbeans 6.9 [...]

Proyecto de base de datos Firebird VB

En este proyecto realizaremos una aplicación de base de datos Firebird con el lenguaje de programación de Visual Basic de Microsoft, este proyecto tendrá las funciones básicas de gestión INSERT, DELETE, UPDATE y una interfaz de usuario para utilizarlas. ¿Que necesitamos? Visual Studio 2008 o superior Firebird última versión Firebird ADO.NET Data Provider. Conocimientos básicos [...]

Imprimir imagen con Print

La siguiente clase hace uso de PRINT para imprimir una imagen que se encuentra en un variable de tipo FileInputStream, esta clase a su vez es implementada desde una interfaz que hace fácil su uso, la clase así como todo el proyecto esta comentado. import java.io.File; import javax.print.Doc; import java.io.IOException; import javax.print.DocFlavor; import javax.print.SimpleDoc; import java.io.FileInputStream; [...]

Code Army Bolivia
Mostrando entradas con la etiqueta Tutoriales. Mostrar todas las entradas
Mostrando entradas con la etiqueta Tutoriales. Mostrar todas las entradas

22/1/13

Descargar y subir archivos desde mega

JAN29

El 19 de enero de 2013 Kim Dotcom cumplió su promesa y lanzo el nuevo Mega mejorado, tal fue la expectativa mundial que en los primeros días el servicio estaba completamente saturado, pero ya todo se normalizo y la gente ya puede subir y descargas archivos con normalidad.

Ahora te muestro como :)

Kim Dotcom recomienda utilizar el navegador de google Chrome, si no lo tienes debes descargarlo e instalarlo en tu pc, si tienes IE instalado puedes cerrar está pagina y lanzarte por la ventana mas cercana  gritando "bazinga!!!" ;)

Comencemos con Mega 

Lo primero que necesitas es crear una cuenta, debes introducir nombre, correo electrónico y contraseña. Esperas unos segundos por la confirmación en tu correo y una vez que actives el servicio ya estará todo listo para compartir archivos :)

La interfaz a diferencia del anterior megaupload es bastante sencilla y agradable, puedes elegir el idioma en el menú superior, el segundo contando de derecha a izquierda, el que tiene el icono del planeta tierra pues o.O

La nueva interfaz tiene un diseño bastante intuitivo y una vez que cambias la preferencia del idioma, es imposible perderte.

Cifrado RSA

El nuevo Mega, implemento el cifrado RSA de 2.048 bits esto para evitar las violaciones de copyright, este cifrado lo que hace es encriptar todo archivo que subas a "la nube" de esta manera Kim y Mega no conocen el contenido de tu archivo, pero Mega advierte que el responsable de los archivos que subes así como con quienes los compartes, es responsabilidad tuya y Mega se reserva el derecho de almacenar algunos datos tuyos como la IP. 

Subir un archivo

Mega te permite como en el anterior servicio, crear tu sistema de carpetas para mantener el orden en los archivos que subas, para subir un archivo puedes, hacer clic en el botón "subir archivo" para buscar y seleccionar el archivo desde tu pc, o puedes arrastrar directamente con clic sostenido a la pantalla, la subida del archivo comenzara enseguida.

Cuando el archivo termine de subir, este se muestra en pantalla y si quieres realizar alguna acción sobre el, debes hacer clic derecho, te mostrara una lista con las opciones que puedes llevar a cabo.

Publicar un archivo

Para compartir el link de descarga con tus amigos, escoge la opción "Obtener enlace", en la ventana que aparece tienes a disposición el enlace del archivo y la llave para desencriptar el archivo.

Mega divide sus enlaces, separados por un signo de exclamación "! " de la forma :

http://mega.co.nz/#!enlace-de-archivo!llave-del-archivo


Si publicas solo el enlace del archivo, todo el mundo podrá verlo, pero no podrá descargarlo a menos que tenga la "llave del archivo".

https://mega.co.nz/#!xFdxjSZA


Si quiere que cualquiera pueda descargar tu archivo , debes publicar el enlace del archivo y su llave.

https://mega.co.nz/#!xFdxjSZA!Vg6yVRs99M43jMSRpe8R8G79L9l8YMK0CUVy7tp6_rg


Si eres observador o.O, notaste seguro el botón "Importar" y te preguntaste para diablos sirve, :) sirve para transferir archivos de una cuenta a otra sin tener que descargarlos en tu pc, Util Verdad :)

Ahora que sabes utilizar Mega, comparte, comparte y comparte hasta que se te caigan todos los dedos de las manos que también tienes dedos en los pies :)

enjoy!

continue reading

4/9/12

Control de Stock en Java y MVC

JAN29


Un SGA "Sistema de Gestión de Almacenes"  es un programa informático destinado a gestionar las entradas y salidas de productos de un almacén, también es el encargado de gestionar todos los movimientos que se llevan a cabo dentro del almacén, maquinaria, trabajadores, etc . Proviene de la traducción del término inglés "WMS" (Warehouse Management System).

Un "control de stock" o "gestión de stock" como se prefiera llamarlo, es un sistema más simple, más reducido que un SGA, y nos sirve para  organizar, planificar y controlar el conjunto de stocks pertenecientes a una empresa.


En esta serie de 5 tutoriales construiremos un sistema de control de stock siguiendo el patrón de diseño MVC (Modelo, Vista y Controlador)



  1. Introducción y construcción de la base de datos
  2. Preparación del proyecto mvc en Netbeans
  3. Construcción de la VISTA
  4. Construcción del MODELO
  5. Construcción del CONTROLADOR


continue reading

7/7/12

Creación y uso de Javadoc con Netbeans

JAN29

Javadoc es un paquete de desarrollo de java que nos genera documentación sobre nuestro proyecto de cada una de nuestras clases en una jerarquía de árbol.

Su uso es recomendable para todo proyecto, incluido los proyectos pequeños porque nos ayuda a tener siempre un código bien documentado, el único contra que tiene su uso, es que es muy tedioso documentar cada paso que se da al escribir el código (en general por los programadores flojos como yo), por lo demás, es una buena regla de programación.

Javadoc funciona por medio de MARCAS que le ayudan al API reconocer las partes que queremos  documentar y crear los archivos HTML.



@author - El nombre del autor del proyecto por ejemplo pepito :)
@version - La versión del proyecto
@see - Añade una referencia a una clase, método o enlace web
@param - Nombre de parámetro utilizado en un método incluido su significado
@return - El resultado de un método incluido su descripción
@exception - Nombre de la excepción mas una descripción
@throws - Nombre de la excepción mas una descripción
@deprecated - Añade una alerta al usuario de que el método que sigue a continuación ya no debe usarse y que será eliminado en versiones posteriores.


Al escribir los comentarios también podemos hacer uso de algunas etiquetas HTML para decorar un poco más nuestra documentación.


Para indicarle a Javadoc que queremos incluir documentación, debemos comenzar los comentarios de la siguiente manera:

/**
* Esto para Javadoc
*/


Veamos su uso con un ejemplo.


Creamos una clase llamada "Clase_java" y en el encabezado colocamos el autor de la clase, la instrucción @see con un enlace a una página web, también podemos agregar la versión de la clase:

/**
 * @author Mouse
 * @see <a href="http://www.jc-mouse.net">http://www.jc-mouse.net</a>
 * @version 1.2 07 de Mayo de 2013
 */
public class Clase_Java {
...
}
También podemos documentar las variables que hacen parte de nuestro código
/**
 * Variable privada: Nombre del autor
 */
private final String Autor = "jc Mouse";

/**
 * Variable publica: Una frase para reflexionar
 */
public String Frase_del_dia = "Carpe diem";

Cuando se haga uso de estas variables comentadas, en el editor de Netbeans podremos ver algo como esto:
No debemos olvidar tambien comentar e constructor de clase
/**
 * Constructor de clase     
 */
public Clase_Java(){
...
}
Cuando creamos un método es recomendable documentar los parámetros de entrada, si es que los tuviera, y si este método retorna algún resultado, utilizar la marca @return, si por el contrario el método es de la forma VOID, no se usa nada. Así también para las excepciones que puedan ocurrir se usa @exception. En la descripción del método, se puede incluir un ejemplo de uso encerrado en las etiquetas PRE, por ejemplo:
    /**
     * Método que convierte una cadena de la forma "yyyy-MM-dd HH:mm" a Date
     * <PRE> Clase_Java cj = new Clase_Java();
     * Date date = cj.StringToDate("2012-10-01 12:00")</PRE>
     * @param value String que debe tener la forma "yyyy-MM-dd HH:mm"
     * @return Date Un objeto Date con la fecha parseada
     * @exception ParseException Error de parseo, ocurre cuando no se puede convertir un String a Date          
     * @since incluido desde la version 1.0
     */
    public Date StringToDate( String value )
    {
        Date date = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
         try {
            date = (java.util.Date) formatter.parse( value );
        } catch (ParseException ex) {
            System.err.println( ex.getMessage() );
        }
        return date;
    }
Cuando utilicemos este método, podremos ver que Netbeans nos despliega toda la información en cuando se hace referencia al nombre StringToDate.
Cuando tenemos varias versiones de un proyecto y vamos actualizando los metodos, antes de eliminar los métodos que ya no se harán uso, es preferible, primero alertar al usuario que ciertas funciones dejaran de existir en versiones posteriores, para esto, en la descripción se añade la marca @deprecated, y la marca @see, que hace referencia a la función de reemplazo, es decir, supongamos que en una primera versión tenemos un método llamado Suma pero que en una nueva versión se decide crear una nueva versión suma_enteros, entonces lo que debemos hacer es añadir en la documentación de Suma, la alerta de que esta función ya no se utilizara más y que es mejor usar la nueva función suma_enteros, es decir:
/**
     * Metodo que suma dos enteros y retorna el resultado, gran cosa no :)
     * @param a Número Entero
     * @param b Número Entero
     * @return int Un entero que es el resultado de a + b
     * @deprecated No se aconseja su uso
     * @see suma_enteros( int, int )
     */
    public int Suma( int a , int b)
    {
        return a + b;
    }

    /**
     * Metodo que suma dos enteros positivos y retorna el resultado
     * @param a Número Entero
     * @param b Número Entero
     * @return int Un entero que es el resultado de a + b, si los numeros son negativos, retorna cero.
     */
    public int suma_enteros( int a, int b)
    {
        int resultado = 0;
        if( a>0 && b>0)
            resultado = a + b;
        return resultado;
    }
Ahora, cuando se haga uso del método Suma, este nos aparecerá con un subrayado y con la alerta correspondiente:
El código completo de la clase es:
package jcdoc;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * @author Mouse
 * @see <a href="http://www.jc-mouse.net">http://www.jc-mouse.net</a>
 * @version 1.2 07 de Mayo de 2013
 */
public class Clase_Java {

    /**
     * Variable privada: Nombre del autor
     */
    private final String Autor = "jc Mouse";
    /**
     * Variable publica: Una frase para reflexionar
     */
    public String Frase_del_dia = "Carpe diem";
    
    /**
     * Constructor de clase     
     */
    public Clase_Java(){
        System.out.println( this.Autor + " te aconseja '" + this.Frase_del_dia + "'" );              
    }

    /**
     * Método que convierte una cadena de la forma "yyyy-MM-dd HH:mm" a Date
     * <PRE> Clase_Java cj = new Clase_Java();
     * Date date = cj.StringToDate("2012-10-01 12:00")</PRE>
     * @param value String que debe tener la forma "yyyy-MM-dd HH:mm"
     * @return Date Un objeto Date con la fecha parseada
     * @exception ParseException Error de parseo, ocurre cuando no se puede convertir un String a Date          
     * @since incluido desde la version 1.0
     */
    public Date StringToDate( String value )
    {
        Date date = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
         try {
            date = (java.util.Date) formatter.parse( value );
        } catch (ParseException ex) {
            System.err.println( ex.getMessage() );
        }
        return date;
    }

    /**
     * Metodo que suma dos enteros y retorna el resultado, gran cosa no :)
     * @param a Número Entero
     * @param b Número Entero
     * @return int Un entero que es el resultado de a + b
     * @deprecated No se aconseja su uso
     * @see suma_enteros( int, int )
     */
    public int Suma( int a , int b)
    {
        return a + b;
    }

    /**
     * Metodo que suma dos enteros positivos y retorna el resultado
     * @param a Número Entero
     * @param b Número Entero
     * @return int Un entero que es el resultado de a + b, si los numeros son negativos, retorna cero.
     */
    public int suma_enteros( int a, int b)
    {
        int resultado = 0;
        if( a>0 && b>0)
            resultado = a + b;
        return resultado;
    }

}

Para generar los HTML, vamos a Ejecutar -> Generar JavaDoc. y esperamos unos segundos a que nos genere todos los archivos.

Eso es todo :), bajate el proyecto utilizado en este tutorial AQUI

continue reading

28/5/12

Crea tu lector Feed con Java

JAN29


En este tutorial se crea paso a paso un lector Feed utilizando el lenguaje Java y el IDE Netbeans, ademas se hace uso de la librería rome-1.0 y JDom, el lector es sencillo pero cuenta con una interfaz gráfica lo que hace de este proyecto bastante entretenido. Ve el video y enterate un poco más de lo que haremos en este tutorial.


"Una fuente web o canal web (en inglés web feed) es un medio de redifusión de contenido web. Se utiliza para suministrar información actualizada frecuentemente a sus suscriptores. En su jerga, cuando una página web "redifunde" su contenido mediante una fuente web, los internautas pueden "suscribirse" a ella para estar informados de sus novedades. Los interesados pueden usar un programa "agregador" para acceder a sus fuentes suscritas desde un mismo lugar.


Son muy utilizados en los blogs o bitácoras de Internet, así como en prensa electrónica. Cada día hay más medios que utilizan este sistema de redifusión web. La gran difusión de este tipo de servicio web ha estimulado el interés en otros sectores que comienzan a ver en las fuentes web una forma efectiva de difundir y compartir información empresarial."

Ver tutorial

continue reading

3/11/11

Eliminar malware Security Sphere 2012

JAN29


Security Sphere 2012 es un malware que se hace pasar por un antivirus con el objeto de engañar a la gente y sacarle plata o peor aun, robarle información personal, este tipo de bichos existen muchos en la red como el que aparecio a finales del año pasado Anti Spyware 2011 con las mismas caracteristicas y los que apareceran el proximo año, si es que no es el fin del mundo :(

Entre las acciones que toma este malware tenemos:
  • Bloquea la ejecución de programas, cualquiera de ellos (antivirus, administrador de tareas, etc)
  • Impide la ejecución de script *.VBS, *.BAT, etc
  • Se mete en el registro para ejecutarse cada reinicio de windows
  • Coloca una imagen de color azul como fondo de pantalla, esto solo para alarmar más al usuario :)
  • Cada cierto tiempo muestra una ventanita invitando a comprar el supuesto antivirus
Pero este malware esta mal hecho, esta mal hecho porque no oculta los archivos del sistema, no deshabilita el modo seguro y se mete en los archivos temporales lo que hace facil su hubicación y destrucción.

ELIMINACIÓN DEL MALWARE

1. Reincia tu PC y presiona F8 para ingresar a modo seguro, espera unos minutos a que windows inicie.

2. Con tu PC en modo seguro el malware no se ejecuta, asi que podemos utilizar cualquier programa *.exe incluso script.

3. Si tienes tus archivos ocultos, ve al menu HERRAMIENTAS -> OPCIONES DE CARPETA -> PESTAÑA VER y busca la opcion "Mostrar todos los archivos y carpetas ocultos", dale clic en aceptar

4. Este bicho busca nido en la unidad C:\ de windows, en la carpeta PROGRAMDATA, esto solo para sistemas Windows Vista y Windows Seven. se camufla creando una carpeta con números y letras, ordena las carpetas por "fecha de modificación" y sera la ultima que se creo como se puede ver en la imagen, pero OJO, no sera la misma que la imagen, estos malwares se crean utilizando nombres alfanumericos al azar asi que tu tendras otra carpeta con diferente nombre.
Como se ve en la imagen, reconocemos el malware por su icono que es el mismo que nos muestra en la molestosa ventana de propaganda.

5. Ahora procederemos a su eliminacion, como se ve en la imagen, lo que yo hago es RENOMBRAR el archivo original eB32111DnDb32111.exe por otro, por ejemplo: eB32111DnDb32111.exe_ESTO_ES_UN_MALWARE.

¿Porque hago esto?
Pues porque como programador friki :) quiero guardar el malware para investigaciones posteriores, diseccionarlo y estudiarlo ;)

Tú puedes simplemente eliminarlo a no se ser que quieras guardarlo como recuerdo :/

Dependiendo si lo hallas renombrado o eliminado, continuemos...

6. Para terminar debemos limpiar el registro del sistema, para esto utilizaremos el programa CCLEANER, ejecutalo y escoge la opcion REGISTRO y ejecuta la limpieza.
Como vemos en la imagen te mostrara la hubicación de la clave de registro que creo el malware, solo dale a reparar seleccionados -> reparar todas las seleccionadas.

Como dijimos al principio este malware tambien crea su respaldo en los archivos temporales, estos archivos tienen el nombre de t849.tmp, 689.tmp, etc al igual que el malware principal, toman nombres al azar, su tamaño esta entre los 3,9 MB, para eliminarlos a todos, selecciona la opcion de ccleaner -> LIMPIADOR, el que tiene forma de una escoba y elimina todos los archivos temporales de internet.

Eso es todo, reinicia el sistema e ingresa en modo normal y el malware habra desaparecido

continue reading

8/8/11

Crear instaladores para programas hechos en Java

JAN29

Con este post doy inicio a una serie (espero no muy larga) de tutoriales para la creacion de instaladores para programas hechos en Java con/sin base de datos, se hara uso de varios programas externos a java asi como diferentes lenguajes de programacion para ayudarnos en la creacion de los instaladores, sin más dejo el primer videotutorial.

1. Creacion de un instalador simple sin base de datos con WinRar

Se requiere:
  • Programa Winrar
  • Resources Hacker
  • Editor de imagenes (Photoshop,Gimp,etc)
  • Editor de iconos o si ya los tienes un icono

Continuando con esta serie de tutoriales para la creacion de instaladores java, algo que muchos preguntan es en la creacion de ejecutables java, pues bien, nosotros no haremos eso, no porque sea imposible o no se pueda hacer, sino porque es un trabajo complejo y que creo que no va con la esencia misma del lenguaje Java, pero lo que si haremos es en crear ejecutables para los programas java, mas propiamente para los archivos ejecutables *.JAR, estos exes más  conocidos como lanzadores (launch), permiten ejecutar al cliente  los programas java como cualquier otro programa de windows, ya que de eso se trata, de facilitarle la vida al usuario final. En internet puede encontrase cientos de estos lanzadores, entre los mas conocidos y gratuitos tenemos JavaExe, launch4J, pero como programadores, tambien es necesario saber crear uno mismo sus herramientas, en esta ocasion, utilizaremos VB.NET de Visual Studio para crear nuestro lanzador. sin mas charla, los tutoriales.

2. Crear EXE para Java con JavaExe

 3. Crear ejecutables con Launch4J

4. Crear lanzadores java con Visual Basic .NET

Ahora la cosa se va poniendo buena, en el siguiente tutorial crearemos un instalador bastante profesional para programas java con Visual Studio, aun no implementamos la base de datos, paso a pasito ;)
5. Crear instalador Java con Visual Studio

6. Crear CD Autoejecutable con Java para Java


Pues si señores, continuando de tiempito, estaba ocupado :) sepan disculpar, ahora dejo a consideraciones de la comunidad de programadores un proyecto para crear un CD autoarrancable o autoejecutable, como quieran llamarlo, al estilo de AutoPlayCD pero todo escrito en Java, ademas con esta aplicacion, tambien se puede instalar MySQL y restaurar la base de datos, pero antes realiza una busqueda en el sistema para verificar si se tiene o no instalado este programa, esta creo es la opcion que mas pedian, asi que sin más dejo un video de lo que construiremos

Esta página se ira actualizando a medida que se desarrollen los tutoriales
[Ultima actualización 03/09/2011]

continue reading

5/2/11

Instalación de WordPress 3 en Local e Internet

JAN29


Wordpress: WordPress es un sistema de gestión de contenido enfocado a la creación de blogs (sitios web periódicamente actualizados). Desarrollado en PHP y MySQL, bajo licencia GPL y código modificable (Wikipedia)





¿Qué necesitamos?
  • El paquete de instalacion de WordPress (Ultima versión a la fecha 3.0.4)
  • Un servidor Web Ej. AppServer (ver Instalacion de AppServer)
  • El servidor web debe tener soporte para PHP y MySQL
  • Un Editor de Texto ej. Notepad++

Instalación

Para esta instalación de WordPress en Local se utilizara el programa AppServ, existen otros programas como Xampp que tambien tienen soporte para MySQL y PHP. Si no tienes instalado Appserver en tu PC, instalalo antes de continuar, si instalaras WordPress en un servidor Web de pago o gratuito (Ej. miarroba), no necesitas instalar AppServ, salta directamente al paso 2.

1. Ingresa al administrador de AppServ y crea una nueva base de datos, Ej, dbMiWeb
2. Crea una nueva carpeta en "C:\AppServ\www" o sea "C:\AppServ\www\MiWeb", abre la nueva carpeta y descomprime el archvio Zip que bajaste de WordPress 3.0.4, debes tener algo como esto:
Si estas instalando WordPress en un servidor de internet, solo debes subir estos archivos ya sea por FTP o FTP web en la carpeta raiz de tu sitio

3. Ahora se debe editar el archivo "wp-config-sample.php", abre este archivo con un editor de texto (notepad++)
Los campos que se deben editar son:
  • Nombre de la base de datos: dbMiWeb
  • Nombre de Usuario y Contraseña
  • El Host, para este ejemplo se deja como esta "LocalHost" si utilizas un servidor de internet, estos te proporcionan el nombre del Host, por ejemplo "LinuxHost.com"
4. Una ves editado el archivo del paso 3, debes guardarlo como "wp-config.php"

5. Ahora ingresa  a tu navegador web, y escribe: "http://localhost/miweb/wp-admin/install.php"
o si utilizas un servidor en internet, debes escribir: "http://www.miweb.com/wp-admin/install.php", donde "miweb", es tu dominio en internet
Presiona ENTER.

6.  Llena la informacion que te pide y presiona "Instalar WordPress"



Eso es todo, WordPress te enviara a la pagina de acceso como administrador, ahi podras acceder como administrador y realizar los cambios que creas necesarios o comenzar a postear.

continue reading

22/1/11

Java2D: Marca de Agua con Java

JAN29

Java2d nos permite tambien trabajar con archivos de imagen en diferentes formatos, Java2D tambien cuenta con varios metodos para poder manipular estas imagenes. Aqui un pequeño ejemplo de lo que se puede hacer, el siguiente proyecto hecho en netbeans 6.0, sirve para colocar una "marca de agua" sobre una imagen.

Proyecto:
1. Crea un nuevo proyecto en Netbeans, llamalo como quieras, añade un JFrame y llamalo "interfaz.java", despues añade una clase y llamalo "H2O.java", debes tener algo como esto:
2. Trabajaremos con la interfaz de la siguiente manera:
3. El codigo para la clase "H2O.java", es el siguiente:


import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class H2O extends JPanel implements MouseMotionListener {
    private FileNameExtensionFilter filter = new FileNameExtensionFilter("Archivo de Imagen","jpg","png");
    //tamaño del contenedor
    private int ancho=0;
    private int alto=0;
    //foto y marca de agua
    private Image Fotografia;
    private Image Marca_de_Agua;
    //imagen que se crea en memoria con ambas imagenes
    private BufferedImage Imagen_en_memoria;
    //coordenadas de la marca de agua
     private int Pos_Marca_X=0, Pos_Marca_Y=0;
     
    public H2O(){     
        this.setPreferredSize(new Dimension(ancho,alto));
        this.setSize(new Dimension(ancho,alto));
        this.setVisible(true);
        this.repaint();        
        addMouseMotionListener(this);
    }
    
    //se sobreescribe el metodo paint
    @Override        
    @SuppressWarnings("empty-statement")
    protected void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D)g;
        //se crea una imagen en memoria
        Imagen_en_memoria = new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_INT_RGB); ;                       
        Graphics2D gOculta = Imagen_en_memoria.createGraphics();
        gOculta.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);        
        //se dibuja las imagenes en el contenedor
        gOculta.drawImage(Fotografia,0,0,this);
        gOculta.drawImage(Marca_de_Agua,this.Pos_Marca_X,this.Pos_Marca_Y,this);
        g2.drawImage(Imagen_en_memoria, 0, 0, this);        
    }

    //muestra una ventana de dialgo para abrir un archivo de imagen
    public String Open(String opcion){
       String file=null; 
       JFileChooser fileChooser = new JFileChooser();       
       fileChooser.setFileFilter(filter);
       int result = fileChooser.showOpenDialog(null);  
       if ( result == JFileChooser.APPROVE_OPTION ){                                 
                //se obtiene la direccion del archivo
                file = fileChooser.getSelectedFile().toString();
                if(opcion.equals("foto")){
                    Fotografia = new ImageIcon(file).getImage();                               
                    ancho = Fotografia.getWidth(this);
                    alto = Fotografia.getHeight(this);                    
                    this.setPreferredSize(new Dimension(ancho,alto));
                    this.setSize(new Dimension(ancho,alto));                          
                }else if(opcion.equals("marca")){
                    Marca_de_Agua = new ImageIcon(file).getImage();                            
                }
                this.repaint();
        }
       return file;
    }   
    
 //abre una ventana de dialogo para escoger la direccion y el nombre del archivo a guardar   
 public void Save(){
       String file=null; 
       JFileChooser fileChooser = new JFileChooser();       
       fileChooser.setFileFilter(filter);
       int result = fileChooser.showSaveDialog(null);
       if ( result == JFileChooser.APPROVE_OPTION ){                                 
                file = fileChooser.getSelectedFile().toString();                
                guardar_imagen(file + ".jpg");           
        }       
    }   

    //metodo que guarda la imagen en disco
    private void guardar_imagen(String f){
        try {
            //se extrae el fomato de la cadena "f" que contiene la direccion
            String formato = (f.endsWith(".jpg")) ? "jpg" : "png";   
            //se escribe en disco
            ImageIO.write(Imagen_en_memoria, formato, new File(f));
            JOptionPane.showMessageDialog(null, "La imagen se guardo correctamente...");
 } catch (IOException e) {            
            JOptionPane.showMessageDialog(null, "Error: no se pudo crear la imagen");
            System.out.println("Error: no se pudo crear la imagen");
 }
   }  
    
    //movimientos del raton
    public void mouseDragged(MouseEvent e) {
            Pos_Marca_X = (int)e.getPoint().getX();
            Pos_Marca_Y = (int)e.getPoint().getY();            
            repaint();
    }

    public void mouseMoved(MouseEvent e) {}   
   
}

Esta clase, "H2O.java" se extiende de un objeto JPanel, y sobreescribe el metodo paintComponent para dibujar una imagen sobre este, la imagen es el resultado de la combinacion de dos imagenes, una grande la imagen de fondo y una mas pequeña que es la marca de agua, esta imagen puede cambiar de posicion, realizando un clic sostendido sobre este y moviendo el mouse.

Asi tambien, esta clase cuenta con con otros metodos para cargar la imagenes mostrando una ventana de dialogo. y claro esta, un metodo para guardar la imagen en disco. Todo el codigo esta extra comentado.

4. Para implementar esta clase "H2O.java" en la interfaz, debemos hacer lo siguiente:


public class interfaz extends javax.swing.JFrame {
    //se crea el objeto jpanel H2O
    H2O j2d = new H2O();      
    
    /** Creates new form interfaz */
    public interfaz() {
        initComponents();   
        this.setTitle("Marca de Agua - by Mouse");
        //se añade el jpanel al Scroll
        jScrollPane1.setViewportView(j2d);         
        this.repaint();     
    }
   
   private void cmdLoad2ActionPerformed(java.awt.event.ActionEvent evt) {
        Imagen2.setText(j2d.Open("marca"));        
        
   }

    private void cmdLoad1ActionPerformed(java.awt.event.ActionEvent evt) {
        Imagen1.setText(j2d.Open("foto"));         
   }

    private void cmdSaveActionPerformed(java.awt.event.ActionEvent evt) {
        if(!Imagen1.getText().isEmpty() && !Imagen2.getText().isEmpty())
            j2d.Save();
   }

 /* resto de codigo en netbeans */    

}

Nota: no copies y pegues, analiza el codigo ;)

Si llegaste hasta aqui, solo nos falta compilar el proyecto y si existe ningun error, vamos a probarlo:

La imagen a la cual le colocaremos la marca de agua es esta:
Si, lo se ;)
Y la marca de agua es
Es un archivo PNG con transparencia, tambien puede ser un archivo JPG

Cargamos las imagenes en la aplicacion:
Podemos dar la hubicacion que queramos a la marca de agua, y despues ya podemos guardar.

Espero que les haya gustado este proyecto, a mi si :)

continue reading

Post recomendado