Tomar Fotos en Android VClient

Buenas vi en un foro antiguo que alguien consultaba por la posibilidad de tomar fotos en android por medio de velneo, mas no vi respuesta concisa de como hacerlo, alguien sabe por que medio podría hacerlo?
Que vi en el foro una respuesta con un link mas no apuntaba a ningún sitio, imagino expiro la dirección a la cual apuntaba.

Buenas!
Te paso una captura de cómo puede hacerse. Es válido tanto para Android como para iOS.
Sólo tienes que tener un formulario QML con el código que aquí te copio.
Todo el mérito, de Paco Satué, que compartió este código en uno de sus ejemplos.
Saludos,
César

30

import QtQuick 2.6
import QtQuick.Layouts 1.3
import QtQuick.Controls 1.4
import QtMultimedia 5.7

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 cámara arranque correctamente
	// Si se queda colgado el vClient desconectar el cable USB
	id: tIniciar
	interval: 100
	running: true
	onTriggered: {
	camera.start()
	}
}
Camera {
    id: camera
	captureMode: Camera.CaptureStillImage

    imageCapture {
		id: cameracapture;
        onImageCaptured: {
            // Show the preview in an Image
            foto.source = preview
        }
		onImageSaved: {
			// Muestra la imagen capturada
			nNumFoto++
			theRoot.setVar("FOTO_HECHA", 1 )

		}
    }
}

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: 10;
visible: nNumFoto > 0
fillMode: Image.PreserveAspectCrop;
source: null

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

}

Gracias por el código voy a insertarlo en mi aplicación y cualquier duda la hago saber.
Gracias

Buenas ya con el código tengo un avance mas estoy teniendo un inconveniente, a lo que me parece con la poca experiencia de QML que manejo la cámara no se esta inicializando puesto que el cuadro directamente aparece en negro, el código lo copie tal cual lo pasaste :
import QtQuick 2.6
import QtQuick.Layouts 1.3
import QtQuick.Controls 1.4
import QtMultimedia 5.7

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 cámara arranque correctamente
	// Si se queda colgado el vClient desconectar el cable USB
	id: tIniciar
	interval: 100
	running: true
	onTriggered: {
	camera.start()
	}
}
Camera {
    id: camera
	captureMode: Camera.CaptureStillImage

    imageCapture {
		id: cameracapture;
        onImageCaptured: {
            // Show the preview in an Image
            foto.source = preview
        }
		onImageSaved: {
			// Muestra la imagen capturada
			nNumFoto++
			theRoot.setVar("FOTO_HECHA", 1 )

		}
    }
}

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: 10;
visible: nNumFoto > 0
fillMode: Image.PreserveAspectCrop;
source: null

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

mas a la hora de la visualización en la app desde el movil se ve de la siguiente forma:
1 2

Alguna idea de que error cometí?
Igualmente lo estaré trabajando para ver si consigo encontrar el error que cometí por mi parte

Gracias

Ya no, ya encontre mi error, inserte el script del botón en el QML.

Una Duda en base a que la foto se almacene en el cuadro de la parte inferior de la pantalla que configuración tendria que ponerle para que reciba la foto?

Sólo tienes que comentar alguna línea tocando el width, heigh y anchors de las 3 líneas que están seguidas en la definición de Image…
Pasa de esto 47
a esto
38

Buenos días!

Primero de todo, gran aporte! muchisimas gracias!!

Por otro lado, estoy intentado adaptarlo a mi APP, y justo después de que pida permisos para utilizar la camara, en Android se queda colgado y no muestra la camara y en IOS no realiza nada pero no queda colgado.

¿Que puedo estar haciendo mal??

Gracias por adelantado!

Me sucede lo mismo que a claguna, ¿Alguna solucion?

Personalmente a mi no me esta quedando congelada la aplicación y no he probado en IOS mas en android me está funcionando, como agregaron los scripts UML? talvez ahi este el problema.

Hola Luis David,

Tengo dos objetos, un formulario con una vista incluida del formulario QML.

Y por otro lado tengo el formulario QML con el fichero QML que lo tengo importado en el proyecto,

Es así?? o realmente me confundí??

Está perfectamente montado así.
Quizá la declaración de la variable FOTO_HECHA que recoge si se ha hecho click?
Si la utilizas, tiene que estar en los 2 formularios: en el QML, que es donde se le asigna el valor en el disparo y el en que contiene el QML para poder preguntar por ella…
13
27

lo monte por el mismo metodo que indica icenter, si no te funciona sube una foto con el código de como lo tienes montado a ver si es algún error montado por algún lugar.

Hola!

Acabo de verlo, y realmente me quedaba de poner una variable FOTO_HECHA en el formulario ( solo lo puse en uno de ellos ). Mil gracias!!

Ahora en iOS me funciona sin problema, pero en Android no se me llega a cargar la camara y me “expulsa” de dicho formulario y se queda colgada la APP.

Saludos,
Carlos

Hola Foro

Estoy intentando adaptar la posibilidad de poder realizar fotografia a traves de un móvil con Android.

Siguiendo todas las indicaciones de esta entrada, no consigo que funciona correctamente.

Me intento explicar: Tal y como lo tengo montado, al pulsar el botón que llama a un Evento, que crea un manejador de objeto para poder abrir otro formulario donde esta montado la vista de datos con el formulario QML, este formulario se me va atrás y no lo puedo manipular por que se queda el formulario que lo llama delante de este.

No se si es la mejor forma para montar la abertura de la cámara para realizar la fotografia.

Os adjunto imágenes de como lo tengo montado.

Capturar%20Foto%201

Capturar%20Foto%202%20-%20Manejador

Capturar%20Foto%203%20-%20Formulario%20con%20Vista%20de%20Datos%20y%20QML

Capturar%20Foto%204%20-%20Archivo%20QML

Buenas Ramón
Una consulta, tal vez fallo mio mas no puedes hacer un establecer foco hacia el formulario que se te va atrás para que este gane la pantalla?
Sino para revisar un poco mas a fondo.

Hola,

Lo que si tengo comprobado es que el programa corriendo en IOS, funciona perfectamente todo lo planteado.

El tema esta cuando esta corriendo en Android.

Os pasa a todos ?

Saludos

Mismo caso mas no se si el mismo fallo, en mi caso el fallo que topo es con la pre visualización de la foto tomada, de ahí en mas no me da ningún problema. No he podido probarlo en IOS.

Buenas!
A mí me pasó igual. Se ve que no se comporta igual bajo iOS que bajo Android…
Tuve que hacerlo llamando a acciones, que disparan los formularios. Así sí funciona bien en ambos entornos.

Hola

Efectivamente, llamando el formulario a traves de una acción, se puede utilizar tanto en Android como en IOS.

Aunque de esta forma podemos tener una captura para nuestras app’s de movil, es bastante basica, como no poder realizar un enfoque como se puede hacer con la camara del movil.

Con esta opción, al presionar encima de la imagen que queremos captar, no realiza un auto-enfoque, lo que hace es, tomar la foto en ese preciso momento.

Pero para salir del escollo, y mientras esperamos que un dia Velneo tenga en Nativo las opciones para poder manipular y hacer fotos, esta opción es buena.

Foto%20movil

Muchas gracias
Saludos