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

28/2/11

Invertir imagen en Java (Filtro Negativo)

JAN29

Java nos permite mediante la clase BufferedImage manipular archivos de imagen byte por byte, por ejemplo para conseguir el efecto de "negativo" para una foto como hace el filtro de photoshop, corel o gimp.

Para este ejemplo, utilizaremos una foto de "rikku", un personaje de Final Fantasy, con un lindo par de ojos ;) para invertir la imagen, obtendremos todos los pixeles de la foto, de cada pixel se extraeran sus valores RGB (rojo, verde, azul) y se les restara 255,este nuevo  valor, se insertara en una nueva imagen de tipo BufferedImag, esto se realizara para cada pixel de la image. Osea:

255 - Valor_R = Valor_R_invertido
255 - Valor_G = Valor_G_invertido
255 - Valor_B = Valor_B_invertido

La clase que hace todo esto es:


import java.awt.Color;
import java.awt.image.BufferedImage;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class invertir {
    private BufferedImage foto;
    private int r,g,b;
    private Color color;
    public invertir(){}
     
 /* Invierte los bytes de una imagen */
  public void SetInvertir(BufferedImage f){
        this.foto = f;
        for(int i=0;i<foto.getWidth();i++){
          for(int j=0;j<foto.getHeight();j++){
                //se obtiene el color del pixel
                color = new Color(foto.getRGB(i, j));
                //se extraen los valores RGB
                r = color.getRed();
                g = color.getGreen();
                b = color.getBlue();
                //se coloca en la nueva imagen con los valores invertidos
                foto.setRGB(i, j, new Color(255-r,255-g,255-b).getRGB());                                                                    
          }
        }        
    }
    
    public BufferedImage getFoto(){
        return this.foto;
    }  
    
}
Esta simple clase, recibe un objeto de tipo BufferedImage y procesa byte por byte los colores de la imagen y las invierte, esta clase tambien retorna una imagen del tipo BufferedImage invertida.

Implementando esta clase y pasando como parametro la imagen anterior, obtenemos como resultado la imagen invertida.

continue reading

21/2/11

Personalizar ToolTipText

JAN29

¿Que es ToolTipText?
Pues es el texto que se muestra en pantalla cuando se coloca el mouse encima de un objeto en java (Botones, paneles, labels, etc).

¿Para que sirve?
Sirve para mostrar ayuda visual al usuario en forma de texto.

La clase ToolTipText, acepta codigo HTML, esta caracteristica , nos permite modificar el formato del texto que se ve en pantalla, por ejemplo:

- Para colocar dos lineas en un ToolTipText de un jButton, se debe escribir:


BOTON.setToolTipText( "<html>Estoy en primera linea<br>Y yo estoy en segunda linea</html>" );
Esto nos da como resultado:
- Y asi se puede utilizar las etiquetas HTML para personalizar el ToolTipText, por ejemplo utilizando las etiquetas H1,H2,H3,H4,H5 para modificar el tamaño de las letras:

BOTON.setToolTipText( "<html><h1>Soy Grande</h1><br><h5>Y yo soy un enano<h5></html>" );

- Tambien podemos poner imagen:

BOTON.setToolTipText( "<html><img src=\""+getClass().getResource("mouse.jpg")+"\"></html>" );
Para colocar una imagen en ToolTipText, se utiliza las etiquetas HTML para imagen ( IMG ), y colocamos como ruta de la imagen, el archivo de imagen que se encuentre dentro de nuestra JAR, para eso utilizamos GETCLASS().GETRESOURCE(), que retorna la direccion del archivo.
Y tenemos:
Para terminar el post, se pueden crear complejas presentaciones para ToolTipText utilizando HTML y codigo CSS, pero sin exagerar que esto relentiza un poco la aplicación. De todas formas esta "ayuda" que brinda ToolTipText, pocas veces se utiliza por el usuario final y solo queda como un complemento mas que se puede añadir a las aplicaciones.

Codigo Fuente del ejemplo, en Netbeans 6.9.1
Click para descargar
Me actualice :)

continue reading

18/2/11

Preparar el espacio de trabajo para el modelado 3D

JAN29


Para modelar un nuevo personaje 3d o algún otro objeto en el programa 3D Max, se debe comenzar primero a preparar el espacio de trabajo, este proceso que es algo muy basico pero ademas muy importante, es lo veremos en el siguiente tutorial.

Enlace: Preparar el espacio de tranajo para el modelado 3d

continue reading

15/2/11

Relaciones entre Objetos Semánticos

JAN29

Las relaciones entre Objetos Semánticos, se establece a través de referencias cruzadas (relaciones binarias, ternarias y unarias o reflexivas), atributos de grupo, objetos de asociación, objetos padre-subtipo (herencia) y arquetipo-versión (dependencia).

Por ejemplo las siguientes relaciones:

Relación Binaria:

Relación Ternaria:

Relación Unaria (Reflexiva o Recursiva)

Cuando se trata de relaciones muchos a muchos (binaria, ternaria, unaria) con atributos de relación, se debe crear un nuevo objeto de asociación que contenga los atributos de la relación.
Cuando la relación es uno a muchos con atributos de relación, dicho atributo pasa al objeto con multiplicidad a muchos.

continue reading

12/2/11

Tipos de Objetos Semanticos

JAN29

Son siete tipos de objetos semanticos:
  1. Objeto simple
  2. Objeto Compuesto
  3. Objeto Combinado
  4. Objeto Hibrido
  5. Objeto de Asosiación
  6. Objeto Padre-Subtipo
  7. Objeto Arquetipo-Version.

Objeto Simple. Solo tiene atributos de valor simple y que no son de objetos.

Objeto Compuesto. Tiene uno o más atributos de valor multiple (de grupo).

Objeto Combinado.Tiene al menos un atributo de objeto semantico.

Objeto Hibrido. Tiene al menos un atributo de grupo y de objeto semantico.

Objeto de Asociación. Relaciona dos o más objetos y contiene datos referentes a tal relación (atributos de relación). Es equivalente a la Agregación del MER

Modelo lógico de datos

EMPRESA ( NIT, NombreEmpresa, Direccion, Telefono, e-mail )
FUNCIONARIO ( Item, NombreFuncionario, FechaNacimiento, Sexo, Direccion )
CONTRARO ( NIT, item )

Objeto Padre-Subtipo. Permiten la representación de la Herencia. Un objeto Subtipo hereda las caracteristicas (Atributos) del objeto padre. Es equivalente a la Generalización-Especializacion del MER.

Modelo lógico global de datos:

FIGURA GEOMETRICA ( CodigoFigura, Area, Perimetro, Color )
CUADRADO ( CodigoFigura, Lado )
CIRCULO ( CodigoFigura, Radio )
TRIANGULO (CodigoFigura, Base Altura)

Objetos Arquetipo-Versión. Un objeto arquetipo, produce otros objetos que representan versiones, etapas o ediciones del mismo.

Modelo logico de datos:
LIBRO ( Codigo, Titulo, Autor, Editorial )
EDICION ( Codigo, NumEdicion, Fecha, NumPaginas)

continue reading

Procesamiento de Imágenes en Java2d (Los Colores)

JAN29

Un archivo de imagen está compuesto dependiendo de las dimensiones de este archivo, en cientos y miles de pixeles, un pixel es un punto de color que varían en su tonalidad de un pixel a otro, creando así la imagen digital.

Si se realiza un zoom a una imagen cualquiera, puede verse como este esta pixelado

Un pixel está compuesto por los colores básicos RGB en sus siglas en ingles (Red, Green, Blue) en español, ROJO, VERDE, AZUL, estos tres colores básicos combinados en diferentes valores (0 a 255) forman una amplia gama de tonalidades los cuales combinados forman la imagen. Entonces una imagen no es más que una matriz de dos dimensiones de tamaño mXn donde cada elemento de la matriz M(i,j) es un pixel.


JAVA2D
Como cada pixel contiene valores RGB, Java2d nos permite manipular estos valores cargando una imagen en memoria, utilizando la clase BufferedImage,  para poder manipular  los archivos de imagen, esta clase cuenta con varios métodos. Entre ellos tenemos:
  • imagen.getRGB(x,y);
  • imagen.setRGB(x,y,Color_RGB);
El primero no permite obtener el valor RGB de un pixel, dadas sus coordenadas (X,Y) dentro de la matriz.
El segundo método, nos permite asignar un nuevo valor RGB a un pixel, dados sus coordenadas RGB dentro de la mtriz.
Entonces, para poder cambiar los colores de una imagen, solamente debemos obtener sus valores RGB y reemplazarlos por unos nuevos, esto se logra recorriendo toda la matriz pixel por pixel y cambiando sus valores RGB.

Este proceso no es complicado, además no es muy interesante, en cambio si es más interesante, seleccionar un solo color y con este color como referencia, reemplazar todos los pixeles que se encuentren con valores iguales o similares por otro color. Más o menos lo que se realiza con el programa Photoshop, utilizando la varita mágica se selecciona un rango de pixeles y con la herramienta bote de pintura, se reemplaza por otro color.

En la imagen podemos ver todo ese proceso, además, photoshop dado un parámetro de “Tolerancia” (0-255) selecciona no solo el pixel del color donde se hizo un clic, sino todas las tonalidades de ese color, osea, según el parámetro de tolerancia, a mayor tolerancia mayor será el área seleccionada.

¿Cómo logramos esto en Java2d?
Se cargara una imagen en memoria utilizando la clase BufferedImage.

De esta imagen se extrae un pixel al azar con valores RGB (187,13, 14) en una posición (x,y)


Esta imagen forma una matriz mxn donde cada celda es un pixel


[rgb] [rgb] [rgb] [rgb] [rgb] [rgb]
[rgb] [rgb] [rgb] [rgb] [rgb] [rgb]
[rgb] [rgb] [rgb] [rgb] [rgb] [rgb]
[rgb] [rgb] [rgb] [rgb] [rgb] [rgb]


Para cambiar un color de toda la matriz (imagen), se debe recorrer esta mediante ciclos buscando los pixeles que sean iguales al color buscado, y reemplazarlo por otro color. El seudocódigo que hace esto es:
Este seudocódigo, tiene un problema, y es que aunque el ojo humano no pueda percibirlo, un color que para nosotros  puede ser igual, este está compuesto por varias tonalidades, asi es que cuando seleccionamos un color RGB (187,13, 14), la comparación se realiza solo para este color.
Esto hace que el área afectada por el cambio de color sea relativamente pequeña y dependa de la uniformidad de colores de la imagen.
Para solucionar este problema, se introduce un nuevo término, “Tolerancia” y su valor va de 0 a 255, este valor nos ayuda a determinar un rango de matices que se aproximen a nuestro color RGB
Para determinar qué valores ingresan en el rango de “tolerancia”, se utiliza la “distancia euclidiana” cuya fórmula es:

Este valor (d) es la distancia que existe entre dos puntos en el espacio, mientras más corta sea el valor de (d), más pequeña es la distancia entre dos puntos, esto también se aplica a los colores.
Mientras más pequeña sea el valor de (d) los colores son más similares entre si, modificamos el seudocódigo y queda de la siguiente forma:

Abrimos photoshop y utilizamos la herramienta “varita mágica” para seleccionar un color, podemos ver como con distintos valores de tolerancia, seleccionamos más y más aéreas de la imagen.
Aplicando nuestro seudocódigo en java y ya con la aplicación lista, procedemos a seleccionar un color de la imagen y la reemplazamos por otra, los resultados son similares.
 Es lógico que Photoshop utiliza algoritmos mucho más complejos e inteligentes para aplicar sus filtros, por ejemplo, photoshop selecciona solos los colores similares que estén cerca del punto donde se hizo un clic, en cambio, el código que nosotros aplicamos es simple y selecciona todos las tonalidades del color elegido estén donde estén, esto se aprecia mejor en la tercera imagen de ayanami donde aplicamos tolerancia 100, se puede ver como se selecciono el fondo de la imagen, pero también parte del ojo y del cuello que también son de color rojo, se seleccionaron también.


Enlace de descarga del Proyecto
[actualizado]
Click para descargar

continue reading

8/2/11

Reportes con iReport y Netbeans [Parametros]

JAN29

Como se vio en tutoriales anteriores:

Donde se utilizo la herramienta Jaspert Report para la creaciones de los informes y su posterior uso en un IDE como Netbeans, tambien es necesario que en algunos informes se utilicen parametros de entrada para ejecutar las consultas SQL, esto se vio en el videotutorial Reportes con iReport, donde en uno de los ejemplos, se creo un informe que utilizaba un parametro de entrada de tipo String el cual nos permitia ejecutar una consulta para buscar registros con apellidos paternos que empiecen con una letra de A-Z.

Pues, ahora se dara continuacion a ese tutorial, se explica como enviar esos parametros a iReport desde el IDE de Java Netbeans.

Nos creamos una clase  informe_con_parametros.java y pegamos el siguiente codigo:


/* librerias de ireport*/
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
/**
*  @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class informe_con_parametros {
//se estable una conexion con la base de datos
    private conexion con = new conexion();    
    
    public informe_con_parametros(){}
    
     /* reporte sencillo con conexion a base de datos MySQL, 
      * el reporte cuenta con un parametro de entrada */    
     public void ver_informe_con_parametros(String parametro){         
     JasperReport reporte;
     JasperPrint reporte_view;     
     try{
         //direccion del archivo JASPER
          URL  in = this.getClass().getResource("jcReport_Sample1.jasper");
          reporte = (JasperReport) JRLoader.loadObject( in );     
          //Se crea un objeto HashMap
          Map <String,String> parametros = new HashMap<String,String>();             
          parametros.clear();     
          //el nombre que se dio al parametro en JasperReport fue "p1", y se debe llamar desde Java con
          //ese mismo nombre, a su lado se pasa el valor del parametro
          parametros.put( "p1", parametro );               
          //-----------------------------------
          reporte_view= JasperFillManager.fillReport( reporte, parametros, con.getConnection() );
          JasperViewer.viewReport( reporte_view ); 
          //terminamos la conexion a la base de datos
          con.desconectar();
   }catch (JRException E){
     E.printStackTrace();
          }
    }
}

El codigo para llamar esta clase desde el Main es:


public class Main {
    
    public static void main(String[] args) {
        //se genera un informe con parametro de entrada con valor "b"
        new informe_con_parametros().ver_informe_con_parametros("b");
        //se genera un informe con parametro de entrada con valor "m"                
        new informe_con_parametros().ver_informe_con_parametros("m");        
    }
    
}

Esto nos da como resultados


Para descargarte el codigo fuente del proyecto + la base de datos y los archivos Jasper, clic en el siguiente enlace:
Click para descargar

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

Post recomendado