• Sábado 21 de Septiembre de 2024, 19:06

Autor Tema:  restringir tamaño y resolucion al tomar una foto webcam  (Leído 3567 veces)

ditrosi

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
restringir tamaño y resolucion al tomar una foto webcam
« en: Martes 5 de Mayo de 2009, 18:30 »
0
tengo un problema estoy creando un programa con una base de datos donde se guardan los datos de un usuario... el programa ya esta hecho 100% con reconocimiento biometrico y toma fotos desde una webcam...

AYUDA POR FAVOR...

pero tengo un problema y es que no falta el cliente que coloca la super cámara digital como web cam para tomar una foto y me están subiendo fotos de mas de 3MB en la base de datos y la están saturando... luego dicen que es que el programa no sirve que porque es muy lento... en fin mi duda esta en que si alguien sabe de una manera de restringir el tamaño y la resolución con que se toma la foto, es decir que no importe con que tipo de cámara se tome la foto el tamaño max sea de 200Kb y resolución de 150x150 como max...

miren este es el codigo java que tengo para tomar la foto estoy usando la librería javax.media si alguien sabe de una mejor también estoy abierto a nuevas posibilidades

public void Inicializar(){
        try {
            //El nombre del driver para que pueda ser utilizada cualquier WebCam, que este instalada en el equipo
            String dir = "vfw:Microsoft WDM Image Capture (Win32):0";
            di = CaptureDeviceManager.getDevice(dir);
            ml = new MediaLocator("vfw://0");
            video = Manager.createRealizedPlayer(ml);
            video.start();
            comp = video.getVisualComponent();
            if (comp != null) {
                ui.ShowWebCam(comp);
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

public Image tomarFoto(){
        // se captura la imagen y se colaca en un buffer
        FrameGrabbingControl fgc = (FrameGrabbingControl)
        video.getControl("javax.media.control.FrameGrabbingControl");
        buf = fgc.grabFrame();
       
        // se convierte de tipo bufer a tipo Image para poder ser reproducida y almacenada
        btoi = new BufferToImage((VideoFormat)buf.getFormat());
        img = btoi.createImage(buf);
        // Retornamos la foto en una variable tipo Image
         return img;
    }

silverfox

  • Miembro MUY activo
  • ***
  • Mensajes: 280
    • Ver Perfil
Re: restringir tamaño y resolucion al tomar una foto webcam
« Respuesta #1 en: Miércoles 6 de Mayo de 2009, 09:12 »
0
Hola.

Después de haber visto tu código, lo que yo haría sería capturar la fotografía de forma normal, tal y como lo haces ahora. Pero después de capturar y transformar en Image, usar el método   'Image getScaledInstance(int width, int height, int hints)' de la clase java.awt.Image para bajar la resolución.

Otra opción que tienes, que no sé si sería factible para tu programa es cambiar la compresión y/o el formato de las fotos.

Con ambos métodos, te diría que muestres por pantalla la fotografía 'retocada' que se va a guardar, porque puede que alguien no esté de acuerdo en lo que vas a guardar (frases como 'mi cámara hace mejores fotos que eso' y similares) y se empeñe en repetir la foto 50 veces hasta que le guste el resultado.


Espero que te sirva.
Ya nos contarás.


Silverfox

ditrosi

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: restringir tamaño y resolucion al tomar una foto webcam
« Respuesta #2 en: Miércoles 6 de Mayo de 2009, 16:48 »
0
hola silverfox gracias por tu ayuda

la verdad intente hacerlo como decias despues de guardar la foto en una variable tipo image
le di
Image img = img.getScaledInstance(200,150,0);
pero me produce un error al pasar la imagen a un archivo para ser guardada

Cita de: "silverfox"
Hola.

Después de haber visto tu código, lo que yo haría sería capturar la fotografía de forma normal, tal y como lo haces ahora. Pero después de capturar y transformar en Image, usar el método   'Image getScaledInstance(int width, int height, int hints)' de la clase java.awt.Image para bajar la resolución.

Otra opción que tienes, que no sé si sería factible para tu programa es cambiar la compresión y/o el formato de las fotos.

Con ambos métodos, te diría que muestres por pantalla la fotografía 'retocada' que se va a guardar, porque puede que alguien no esté de acuerdo en lo que vas a guardar (frases como 'mi cámara hace mejores fotos que eso' y similares) y se empeñe en repetir la foto 50 veces hasta que le guste el resultado.


Espero que te sirva.
Ya nos contarás.


Silverfox

silverfox

  • Miembro MUY activo
  • ***
  • Mensajes: 280
    • Ver Perfil
Re: restringir tamaño y resolucion al tomar una foto webcam
« Respuesta #3 en: Jueves 7 de Mayo de 2009, 09:37 »
0
Hola ditrosi.

¿Qué error te da?


Por la linea que estás poniendo, no cogiste del todo cómo se usa el método. El tercer parámetro (hints en la documentación) es para poner allí la constante de cómo quieres que se escale la imágen.

Los candidatos son:

static int SCALE_AREA_AVERAGING
          Use the Area Averaging image scaling algorithm.
static int SCALE_DEFAULT
          Use the default image-scaling algorithm.
static int SCALE_FAST
          Choose an image-scaling algorithm that gives higher priority to scaling speed than smoothness of the scaled image.
static int SCALE_REPLICATE
          Use the image scaling algorithm embodied in the ReplicateScaleFilter class.
static int SCALE_SMOOTH
          Choose an image-scaling algorithm that gives higher priority to image smoothness than scaling speed.


He mirado en la documentación y ninguno de ellos era 0. Te aconsejo que pruebes con Image img = img.getScaledInstance(200,150, Image.SCALE_SMOOTH);  para ver si te sigue fallando. Si lo hace, dinos qué error se produce.


Un saludo.


Silverfox