Tomar Fotos en Android VClient

Buenos días a todos,

He replicado la llamada al formulario disparando una acción y en Android me sigue bloqueando la aplicación.

En el formulario de ficha que tengo que capturar la fotografía, tengo un botón que dispara una acción.

Dicha acción, ejecuta un manejador de evento en el que mediante un manejador de objeto, dispara el formulario para ver la camará y realizar la fotografía.

También he probado directamente ejecutando una acción desde el botón y que esta acción dispare el formulario de la fotografía y tampoco me funciona.

Todo esto en IOS funciona correctamente, pero en Android se me queda colgado ( o se me queda en segundo plano el objeto disparado, no lo sé )

No entiendo dónde podría estar la diferencia en este ultimo escollo

Os sigue pasando? Cómo lo resolvisteis?

Saludos!

Hola @tempsmollet / @icenter ,

Según veo me pasa exactamente lo mismo que a vosotros y parece que el formulario de la cámara se queda “detrás” bloqueando la app.

He probado lo siguiente:

  1. Boton que ejecuta acción que llama al formulario que ejecuta la camara

  2. Boton que dispara señal y que a su vez llama a manejador de evento que con un manejador objeto abre el formulario.

  3. Ambas soluciones desde el formulario principal de la app para comprobar que no era por los distintos formularios que voy abriendo.

Sigue con el mismo comportamiento, ¿podeis ayudarme?

Y otra consulta, abriendo un formulario mediante un manejador de objeto, porque en ios lo redimensiona al tamaño de la pantalla y con Android no lo realiza??

Un saludo!!

Hola claguna

Yo te adjunto cinco imagenes que te pueden ayudar a tener una idea de como yo lo he montado.

Funciona bien, tanto en IOS como en Android.

He creado un botón para activar el objeto Acción ->

Imagen%201%20Captura

en la siguiente imagen tienes como queda la acción

Imagen%202%20Captura

En la siguiente imagen tienes la Vista de Datos con el formulario QML

Imagen%203%20Captura

En la siguiente imagen tienes el código del archivo .qml

Imagen%204%20Captura

Y finalmente tienes el formulario funcionando, en este caso en Android.

Imagen%205%20Captura

Saludos
Ramon denuc

Hola @tempsmollet,

Primero de todo, muchas gracias por tu ayuda!!

Realmente, comprobando paso por paso, hacia exactamente las indicaciones que pusiste.

Y por probar y simplificar, puse dicho botón en el formulario inicial de la APP y desde ahí funciona sin problemas.

El problema por tanto lo tengo a la hora de llamar a formularios creando manejadores de objeto ya que es la “unica diferencia”.

Intentaré plantear la navegación y validaciones entre formularios de otra manera para comprobar el funcionamiento.

Un saludo!

Hola,

Una cosa, ese formulario ¿tiene una tabla asociada?

Si es que si, quilate un momento la tabla asociada y prueba.

Saludos

Hola,

Me seguía pasando al quitarle la tabla asociada, pero revisando el hilo recordé que realizando llamadas a acciones, de manera que asi sustituyo los manejadores objeto de formularios, continua funcionando sin problema cambiando el metodo de navegación entre formularios.Saludos

Buenas a todos.
he repasado todos los pasos unas cuantas veces, pero algo me dejo.
Me sale el formulario sin dibujarme el qml, por tanto, ni siquiera accedo a la cámara.
Abro el formulario con la vista de datos de qml, pero no veo la cámara. algo me dejo.
el código del formulario qml me ocupa 84 líneas y ya he revisado que todas las llaves estén correctas.
a ver si alguien me puede arrojar un poco de luz… gracias

Buenas
¿no hay nadie que controle este tema?

Pues después de una semana de descanso retomo el tema y, resulta que la cámara ya funciona. Bueno, tema acabado.
No me digáis porque no funcionaba y porqué funciona ahora.
hasta la próxima

He probado que agregando esta línea se logra el autoenfoque de la cámara:

=====================

Camera {
id: camera
captureMode: Camera.CaptureStillImage
focus {
focusMode: Camera.FocusContinuous // Para activar autoenfoque en la cámara
}

====================
Espero sea de utilidad.

Ahora bien, en mi aplicación no he logrado importar el archivo de imagen que la cámara guarda en el caché al respectivo campo imagen de una tabla velneo. ¿Necesito javascript o es posible lograrlo con un proceso en velneo?

Gracias por su ayuda.

Gracias AGuevara,

Funciona a las mil maravillas, ahora solo faltaria poder tener las opción de poder hacer zoom, ya seria el no va mas.

Saludos
Ramon Denuc

Muchisimas gracias Aguevara por el aporte

Muy útil y funciona perfectamente

Con respecto a tu pregunta sobre guardar la imagen en un campo imagen, no te sabría decir puesto que yo subo mediante SDV a servidor el archivo como tal y guardo un registro en la tabla para su almacenamiento y posterior visualización.

Un saludo

Hola de nuevo

A mi el tema de poder importar la imagen me funciona bien, me intento explicar:

Como puedes ver en el archivo .qml hay un item donde se preparara el destino en un archivo de la imagen tomada.


Y una vez se ha tomado la imagen, el botón de Aceptar solo tengo dos lineas la de importar la imagen y la de aceptar:

Botón Aceptar

Recuerda que el campo donde guardas la imagen tiene que ser de tipo Objeto Dibujo.

Hola de nuevo,

Trasteando con QML y las funciones de cámara, he logrado que funcione el flash de forma automática.

El código sería el siguiente:

exposure.exposureCompensation: -1.0
flash.mode: Camera.FlashOn

Quedaría así:

Un saludo

Buenos días Ramón,

Siguiendo probando y realizando mas funciones como la de zoom, te comento que lo acabo de conseguir hacer funcionar incorporando en el qml lo siguiente:

imagen

Y por otro lado, incorporar el slider:

imagen

Probado y funcionando sin problemas

Espero que sea de ayuda,

Un saludo

Hola, buenos días,

Aparentamente todo bien si no fuera porque la barra de zoom se me queda por detrás de la imagen, es decir, aparece pero inmediatamente la imagen de la camera se superpone a la barra del zoom.

Os dejo todo el código qml, por si veis algún inconveniente que haga que la barra zoom se quede detrás.

import QtQuick 2.9
import QtQuick.Layouts 1.3
import QtQuick.Controls 1.5
import QtMultimedia 5.9

Item {
width: parent.width;
height: parent.height;

property string cPath_Foto: theApp.clientCachePath() + “_camara_foto.jpg”;
property int nNumFoto: 0

Timer {
// Este Timer fuerza un start() para que la camara arranque correctamente
// Si se queda colgado el vClient desconectar el cable USB
id: tIniciar
interval: 100
running: true
onTriggered: {
camera.start()
}
}

Camera {
id: camera
digitalZoom:zoomSlider.value // Para activar el Zoom en la cámara.
captureMode: Camera.CaptureStillImage
focus {
focusMode: Camera.FocusContinuous // Para activar autoenfoque en la cámara.
}

imageCapture {
  id: cameracapture;
    onImageCaptured: {
        // Mostrar la vista previa en una imagen
        foto.source = preview
    }
  onImageSaved: {
  	// Muestra la imagen capturada
  	nNumFoto++
  	theRoot.setVar("FOTO_HECHA", 1 )

  }
}

}

Slider {
id:zoomSlider
width: 100
height: 350
orientation: Qt.Vertical
minimumValue: 0
maximumValue: camera.maximumDigitalZoom // Otro zoom seria: camera.maximumOpticalZoom
stepSize:camera.maximumDigitalZoom/100 // Pasando por 10 pasos.
value:1.0 // Nivel de zoom inicial.
anchors{
left:parent.left
leftMargin: 5
verticalCenter:parent.verticalCenter
}
}

VideoOutput {
id: visor
anchors.fill: parent;
// anchors.horizontalCenter: parent.horizontalCenter
source: camera;
// Para recibir los eventos
focus: visible;
// Para que la orientación coincida con la orientación de la pantalla;
autoOrientation: true;
// La orientación fijada manualmente no se refleja en la captura;
// orientation: nOrientacion;
// Modo de relleno. Deformar o Encajar con o sin recorte;
fillMode: VideoOutput.PreserveAspectCrop // Stretch, PreserveAspectFit y PreserveAspectCrop;
MouseArea {
anchors.fill: parent;

// onClicked: camera.imageCapture.capture();
onClicked: cameracapture.captureToLocation(cPath_Foto)

}

}

Image {
// FOTO. La foto capturada se muestra en un cuadro en la parte inferior izquierda
// FOTO. Ahora aparece capturada a pantalla completa para que la guarden o la desechen.
id: foto

// width: 100;
// height: 100;
anchors.fill: parent;
autoTransform: true;
// anchors.bottom: parent.bottom
anchors.margins: 20;
visible: nNumFoto > 0
fillMode: Image.PreserveAspectCrop;
source: null

MouseArea {
anchors.fill: parent
onClicked: {
}
}
}

}

Os dejo la imagen del movil, donde se puede ver que no esta la barra de zoom.

Saludos
Ramon Denuc

Hola de nuevo,

He reproducido tu error y es debido a que se declara el Slide antes que el VideoOutput y tiene que ser al revés.

Yo lo tengo actualmente así:

Ya nos dirás

Un saludo

Hola y gracias Carlos,

Efectivamente el error era ese, le he cambiado el orden y funciona correctamente.

Te adjunto imagen de como queda la imagen con la barra del zoom

Un Saludo
Ramon Denuc

Buenas,

Despues de haber estado un buen rato repasando y ajustando todo el proceso, ahora para subir el liston y para rizar el rizo, ya seria la ostia que se pudiera configurar en el .qml la resolución de salida del archivo .JPG que se genera al hacer la captura de la imagen, simplemente porque creo que en muchas ocasiones un usuario no necesite hacer fotos de 3200 mg píxeles que generan archivos grandes y que con una resolución de 800x600 pasaría de sobras y generando un archivo final de apenas un par de megas.

Ahí lo dejo, un fuerte abrazo y cuidaros mucho, vosotros y la familia.

Saludos
Ramon Denuc

Camera plugin:
Control flash, captura cámara frontal, trasera, zoom, guarda imágenes en campo imagen Velneo, etc.