Ejemplo recorrer pixeles de una imagen

Lo que este código hace es recibir una fotografía de un rostro y devolver una imagen con la silueta del mismo. Para obtener solo la silueta me di cuenta que en las fotografías por lo regular los contornos de las cosas son mas oscuros que los fondos, entonces recorro la imagen pixel por pixel obtengo la escala RGB de cada pixel y lo comparo con un rango de oscuridad que previamente establecí (en este caso un pixel oscuro va a ser aquel que en su niveles de los colores  rojo, verde y azul se encuentre dentro del rango 0 a 100 ), si el pixel es oscuro se imprime como tal y si no cumple con la condición se pinta de blanco. Y es así como obtengo el efecto de devolver solo la silueta.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
/*
 *
 *@author DiabloGuardian
 *dennysoliver@msn.com
 *
 */
class SiluetasImg extends JFrame { 
  Image imagenFuente; 
  int iniAncho;
  int iniAlto;
  Image imagenNueva;
  int insetArriba;
  int insetIzqda;
  
  public static void main( String[] DiabloGuardian ) {
    SiluetasImg obj = new SiluetasImg();
    obj.repaint();
    }
  public SiluetasImg() {
    imagenFuente = Toolkit.getDefaultToolkit().getImage( "jennifer1.jpg" );
    
    MediaTracker tracker = new MediaTracker( this );
    tracker.addImage( imagenFuente,1 );
        
    try {
      if( !tracker.waitForID( 1,10000 ) ) {
        System.out.println( "Error en la carga de la imagen" );
        System.exit( 1 );        
      }
    } catch( InterruptedException e ) {
      System.out.println( e );
      }
    
    iniAncho = imagenFuente.getWidth( this );
    iniAlto = imagenFuente.getHeight( this );
    this.setVisible( true );
    
     insetArriba = this.getInsets().top;
    insetIzqda = this.getInsets().left;
    this.setSize( insetIzqda+iniAncho,insetArriba+iniAlto );
    this.setTitle( "By DiabloGuardian" );
    this.setBackground( Color.white );
    
    int[] pix = new int[iniAncho * iniAlto];
    try {
      PixelGrabber pgObj = new PixelGrabber( imagenFuente,
        0,0,iniAncho,iniAlto,pix,0,iniAncho );
            
      if( pgObj.grabPixels() && 
        ( (pgObj.getStatus() & ImageObserver.ALLBITS ) != 0 ) ) {
        for( int i=0; i < (iniAncho*iniAlto); i++ ) {
         if(verPixel(pix[i]))
           pix[i] = 0xFFFFFFFF;
          }
        }
      else {
        System.out.println( "Problemas al descomponer la imagen" );
        }
    } catch( InterruptedException e ) {
      System.out.println( e );
      }
    
    imagenNueva = this.createImage( new MemoryImageSource(
      iniAncho,iniAlto,pix,0,iniAncho ) );
    
    this.addWindowListener(
      new WindowAdapter() {
        public void windowClosing( WindowEvent evt ) {
          System.exit( 0 );
        }
      }
    );
  }
  
  public void paint( Graphics g ) {
    if( imagenNueva != null ) {
       g.drawImage( imagenNueva,insetIzqda,insetArriba,this );    
      }
    }
    
    public boolean verPixel(int pixel) { 
int alpha = (pixel >> 24) & 0xff; 
int red = (pixel >> 16) & 0xff; 
int green = (pixel >> 8 ) & 0xff; 
int blue = (pixel ) & 0xff; 
if((red > -1 && red < 100) && (green > -1 && green < 100) && (blue > -1 && blue < 100))
return false;
else
return true;
}     
 }
En el código especificamos la imagen a procesar, que es la siguiente
mario
y el programa devuelve lo siguiente.
salida

Ejemplo para llamar una función pg/psql

 

Este es un ejemplo de como llamar una funcion pg/sql que retorna un valor, y leer el valor dentro de un jsp. En este caso mi función devuelve un valor de tipo boolean.
Esta es la funcion en postgres
CREATE OR REPLACE FUNCTION agregar(double precision, character varying, integer, character varying, 
character varying, character varying)
  RETURNS boolean AS
$BODY$
declare
 id ALIAS FOR $3;
 establecidas int :=0;
 agregadas int :=0;
 inicio date :=TO_DATE($5,'YYYY/MM/DD');
 termino date :=TO_DATE($6,'YYYY/MM/DD');
 nulo date:= null;
 mensaje boolean := false;
BEGIN
 select into establecidas from proyectos where id=id;
 agregadas :=  count(id) from etapas where id=id;
 IF agregadas < establecidas THEN
insert into etapas (monto, observaciones, id_proy, nombre,
 fch_inicio, fch_termino, prorroga) values ($1,$2,$3,$4,inicio,termino,nulo);
mensaje:=true;
 END IF;
 RETURN mensaje;
END;
$BODY$
  LANGUAGE 'plpgsql'

Aquí mandamos llamar la función y capturamos el valor

CallableStatement proc = conn.prepareCall("{ ?=call agregar( ?,?,?,?,?,? ) }");
proc.setFloat(2,monto);
proc.setString(3,observaciones);
proc.setInt(4,p);
proc.setString(5,nombre);
proc.setString(6,fch_inicio);
proc.setString(7,fch_termino);
proc.registerOutParameter( 1, Types.BOOLEAN );
proc.execute();
if(proc.getBoolean(1))
response.sendRedirect("lista.jsp?clave="+p);
else
out.println("<h3 id='colora'><center>No se pude agregar,</center></h3>");
proc.close();

En algunas maquinas puede generar un error la jsp en el tipo de dato que se registra, esto se soluciona registrando el tipo de dato Types.BOOLEAN por Types.BIT y ya no habrá problema alguno, y para obtener el valor de retorno podemos seguir haciendo uso del metodo getBoolean(1) ya que la documentacion dice esto: Recupera el valor de un parámetro JDBC bit o booleano como un booleano en el lenguaje de programación Java.

Google ahora nos presenta, GO

go-logo-blackEl 10 de noviembre por la noche google lanzo su nuevo lenguaje de programación llamado GO y sus características que muestran son: que es simple, rápido, seguro, concurrente, divertido, y lo mejor de todo es que es open source.

Por lo que eh leído, es muy similar a c++, pero por ahí me entere que es una mezcla de c++ y phyton; entonces creo que es orientado a objetos, ademas cuenta con un garbage-collector.

Pongo este video para que se enteren mas de lo que trata.

ahora veamos el ejemplo del “hola mundo”, para ver la simplicidad de la sintaxis

package main

import "fmt"

func main() {
  fmt.Printf("Hello, 世界\n")
}
aqui esta la liga al tutorial link

Ejemplo struts 1.x ( Parte I )

apache-struts-logoA petición de un par de amigos del tecnológico voy a publicar un ejemplo de como desarrollar una aplicación web utilizando el framework de struts 1.x, en este caso solo pondré ejemplos básicos con la finalidad de hacer fácil la comprensión de la forma en que trabaja struts. Como en todos lo cursos vamos a empezar con un poco de teoría para que cuando llegue el momento de los códigos todo sea mas simple de entender. Trataré de publicar cada una de las partes cada semana, así es que empecemos con la primera.

Que es y para que utilizar struts?

Struts es un framework (marco de trabajo) que trabaja bajo la plataforma J2EE e implementa la arquitectura MVC, que nos permite ahorrar tiempo durante el desarrollo de nuestras aplicaciones web, ademas de organizar nuestro proyecto separando la lógica de negocio de la vista.

MVC en struts

Las tres capas con las que se trabaja bajo esta arquitectura son modelo, vista y controlador. La manera de que struts la implementa es la siguiente:

Modelo: En esta capa es donde se encuentra la logica de negocio, en otra palabras es toda la parte funcional de nuestra aplicacion. El modelo esta formado por tres tipos de clases:

DTO (Data Transfer Object): Estas clases nos sirven para encapsular la información en objetos, y poder transferirla entre las demás clases.

DAO (Data Access Object): La funcionalidad de este tipo de clases es acceder a una fuente de datos, realizando consultas, inserciones,actualizaciones, y todo lo demás.

BO (Bussines Object): En este tipo de clases realizamos realmente la lógica de negocios, cálculos, etcétera.

Vista: Esta capa la forman las JSP, las hojas de estilos; para formar las pantallas de los usuarios finales.

Controlador: Ya tenemos la parte de la vista y el modelo, pero falta comunicarlos y esto es la función de la capa controlador, esto se realiza a través de clases Action o DispatchAction.

 

Creo que con esto es suficiente para empezar a entender como funciona struts, a partir del siguiente post empezare a colocar un poco de códigos de ejemplo.

por que DiabloGuardian ?

daredevil

La historia y el por que de este nombre de usuario siempre ha sido un misterio para la mayoría de las personas que me conocen (algunas aunque sea virtualmente), algunos piensan que el nickname es a causa de que me gusta el libro Diablo Guardian de Xavier Velasco, pero  eso solo es una coincidencia, mi afición por este nick surge cuando conozco la historia de DareDevil un buen personaje de Marvel Comics del cual lo que mas me agrada es su habilidad de ecolocalizacion, entonces la verdadera razón de que yo haya adoptado el nombre de DiabloGuardian es simplemente por que es mi superheroe favorito, asi como me pudiera gustar superman, batman, o algún otro personaje yo elegí este.

En varios lugares me pueden encontrar con ese nombre por ejemplo en foros del web