PDA

Ver la Versión Completa : capturar firma en la pantalla de un tablet


juank1971
27-01-2020, 18:21:52
Hola amigos pudieran decirme como puedo capturar en firemonkey la firma de los clientes, me refiero a que firmen en la pantalla de un tablet.


tengo delphi 10.2 tokyo.



saludos juank

Neftali [Germán.Estévez]
28-01-2020, 15:23:12
Has explicado el problema, pero has concretado poco en lo que necesitas.
Es una pregunta muy amplia y tal vez deberías especificar qué necesitas. De otra forma en la respuesta no podemos concretar mucho.


Deberías poder utilizar un Canvas de forma similar a como se usa en programas Windows.
Algunos links que tal vez te sirvan:



aN1rEj9ENcg

QUNgjb8mD0E

TnlgvN0RBiM

juank1971
28-01-2020, 16:16:30
Si gracias Neftali, tu como siempre ayudando a todos con tus conocimientos
(https://clubdelphi.com/foros/member.php?u=3561)
hace no se ni cuantos años me estas aclarando dudas , jj:)jj, a veces creo que ya nos estamos poniendo viejos (https://clubdelphi.com/foros/member.php?u=3561)
gracias^\||/.
(https://clubdelphi.com/foros/member.php?u=3561)

Ya había mirado esos videos y si, es correcto es eso mismo lo que necesito,
pero mira explico un poco más.

Es un sistema de recepción de un hotel, ya hay un sistema en Windows que escanea el pasaporte , y tiene todos los demás datos, solo falta que el cliente escriba algunos pocos más , ciudad, población donde vive, la ciudad , correo si lo desea etc, además de la firma fisica , esto actualmente se hace en un papel, la idea es sustituir esos datos que falta por llenar por el cliente con un Tablet donde el teclea los datos personales que falta que no están en el pasaporte y luego firma para posteriormente actualizar el sistema en Windows con los datos restantes.

Ya tengo eso funcionando, hice una aplicación firemonkey para los tables que se conectan a la base de datos sql server con un servidor REST, los datos los cargo a la Tablet desde el REST en formato JSON y cuando el cliente actualiza hago el proceso inverso haciendo los updates al servidor todo funciona bien.

Pedí aquí lo de la firma, porque en esos videos que he visto y probado si funcionan y realmente se puede hacer una firma, pero si has probado algo de esto y miras bien la pantalla te das cuenta que estos ejemplos en Delphi, la firma final no queda de buena calidad, el trazo es muy áspero y no logro verla como debiera quedar una aplicación de esa envergadura, ya que es vista por muchos clientes y debe verse mas cerna a la realidad o imitar mas el papel, ya he visto varias apk en java y otros lenguajes que digamos según la velocidad del lapiz hacen mas fino el trazo y además el trazo queda si lo detallas bien con mas calidad como si tuvieran mucho mas resolución o algo asi.

De todas formas gracias por tu tiempo voy a seguir probando ahora a ver si logro mejorarla en ese aspecto voy a jugar un poco con la velocidad del movimiento a ver que logro, no se si me entiendes lo que quiero por ejemplo cuando terminas una firma en un papel que mueves más rápido el bolígrafo al terminarla, debiera quedar el final del trazo como si fuera la punta de una aguja o algo mas cónico.

Neftali [Germán.Estévez]
28-01-2020, 16:30:10
No los he utilizado nunca, pero tal vez puedas revisar dispositivos de este estilo; Lápices Capacitivos (https://www.amazon.es/MoKo-Active-Stylus-Alta-precisi%C3%B3n-Capacitivo/dp/B071JNNNJM/ref=pd_aw_sbs_107_1/259-0473227-3924800?_encoding=UTF8&pd_rd_i=B071JNNNJM&pd_rd_r=2512f5bd-3514-4d5d-b86e-13497dd1bbbe&pd_rd_w=YvZdi&pd_rd_wg=8yns8&pf_rd_p=86c37ee7-52d9-436f-a312-1b7beff34614&pf_rd_r=2HNWG795QAF5NP2GA2DB&psc=1&refRID=2HNWG795QAF5NP2GA2DB).

juank1971
28-01-2020, 16:39:02
si ya tengo ese lapiz o parecido y lo que sucede es la aplicacion no importa con lo que lo hagas el trazo hasta con el dedo funciona o con el lapiz el trazo es el mismo , con el lapiz queda mas cercano a la firma real en cuanto a curvas ,pero el trazo sigue siendo muy tozco, tengo que trabajar evidendemente con el delphi no me queda de otra, voy a ver como logro mejorar eso , voy a tratar de trabajar mas profundo en la resolucion del canvas, tambien en tratar de capturar la velocidad del trazo y tratar de afinar el pixel segun la velocidad de la mano.me compredes.

Neftali [Germán.Estévez]
28-01-2020, 17:15:42
Tal vez deberías revisar temas de "Antialiasing". Al final la resolución de la pantalla es la que es.
Otra cosa es hacerle ver al usuario algo diferente.
Revisa esta entrada del blog (https://neftali.clubdelphi.com/redimensionar-una-imagen-antialiasing/) a ver si explica lo que quiero decir.


Explicado visualmente:


https://neftali.clubdelphi.com/images/resultado3.png

juank1971
28-01-2020, 17:37:59
ok gracias sigo intentando

Casimiro Notevi
28-01-2020, 18:32:36
Dibuja con el "lápiz" más fino, por ejemplo, 3 pixeles:


https://fotos.subefotos.com/5c5757cc2efcc4884e2af37a0ee10624o.jpg

juank1971
28-01-2020, 18:48:01
estoy probando eso con el thickness pero sigo sin poder alcanzar el desempeño de esta apk por ejmplo
"Digital Signature E Signature_v9.6.com" que es para hacer firmas en android,


y la ejecuto en el mimso tablet y con esa misma resolucion que tengo y con esa envidiable apk, se puede lograr el efecto que quiero, que es diferentes gruezos en el trazo segun la velocidad de la mano y sin el diente de sierra. se ve la firma perfecta.



off realmente se hace un poco dificil a veces alguna idea en el mundo delphi . jjj gracias sigo intentando :p

juank1971
28-01-2020, 19:48:08
Aunque me sigue quedando la duda neftali y tu comentario anterior

porque en el canvas con delphi con los ejemplos de crear una firma que he realizado que son esos de internet con los videos que me diste me sigue quedando

el diente de sierra en los trazos no importa el grosor, si al final una de las cosas mas poderosas que debiera tener firemonkey era la parte grafica.

Casimiro Notevi
28-01-2020, 19:50:45
Ten en cuenta que muchos programas hacen un tratamiento de la imagen, por ejemplo con un desenfoque gaussiano suave.

Este ejemplo es una captura de una tablet de 6" de las más malas (costó 47 euros) que encontrabas en el mercado hace 8 años. el grosor es de 3 pixeles, y está hecha con el dedo.

https://fotos.subefotos.com/1d0d102fc70fb9ab82d2b29ee715fb64o.png

juank1971
28-01-2020, 19:54:20
tienes algun ejemplo de como hacerlo de esa manera

Casimiro Notevi
28-01-2020, 20:19:02
tienes algun ejemplo de como hacerlo de esa manera
Para android no utilizo delphi porque cuando empecé a desarrollar para android, el delphi todavía no tenía nada para android.
Así que estuve buscando otras alternativas.
De todas formas, está pintado en un canvas normal y corriente de un panel, no tiene nada más.
En el evento "touch" se mira la posición 'x' e 'y' y se pinta una línea entre el punto anterior y el nuevo.


SD.Canvas = CanvasFirma
SD.Panel = pnFirma
SD.SignatureColor = Colors.Blue
SD.SignatureWidth = 3dip
Sub Panel_Touch(SD As SignatureData, x As Int,y As Int, Action As Int)
If Action = 0 Then
px = x
py = y
Else
SD.Canvas.DrawLine(px, py, x, y, SD.SignatureColor, SD.SignatureWidth)
SD.Panel.Invalidate
px = x
py = y
End If
End Sub

Cuando guardas la imagen, si quieres, puedes procesarla un poco con un filtro de desenfoque "fino" para que no se muestren los dientes de sierra, aunque no creo que haga falta con la gran resolución de las pantallas actuales.

Neftali [Germán.Estévez]
29-01-2020, 09:29:30
el diente de sierra en los trazos no importa el grosor, si al final una de las cosas mas poderosas que debiera tener firemonkey era la parte grafica.

Ten en cuenta que muchos programas hacen un tratamiento de la imagen, por ejemplo con un desenfoque gaussiano suave.

A eso me refería con el tema del "antialiasinng".
Puedes aplicarlo una vez tengas la imagen completada y la diferencia es evidente.

juank1971
01-02-2020, 20:46:34
Miren esta es la captura hecha en delphi y en otra apk
https://photos.shutterfly.com/full/84980618679


la blanca esta hecha en una apk en java y la de delphi es la amarilla de abajo esta hecha siguiendo este tutorial de youtube

https://www.youtube.com/watch?v=0NYIKcsM0HM


// esta linea es la que dibuja
Path1.Data.LineTo(TPointF.Create(X, Y));


al parecer las apk de dibijo hechas en java creo que no dibujan una linea sino una secuencia de circulos ,

Casimiro Notevi
01-02-2020, 21:48:50
No se puede ver:


https://i.imgur.com/IlqeYKp.png

juank1971
01-02-2020, 22:04:13
https://ibb.co/ZKhrNLG

juank1971
01-02-2020, 22:05:38
no se como tu puedes pegar una imajen en un post en este foro

juank1971
01-02-2020, 22:07:21
creo que la idea buena para hacer la firma es hacerlo con circulos pero no logro hacerlo todavia con el canvas queda feo



esta es la apk que lo hace perfecto creo que esta hecha en java
https://apkpure.com/digital-signature/com.rihan.digitalsignature

Casimiro Notevi
01-02-2020, 22:31:45
Tomas en enlace a la foto, pulsas en el icono de arriba y la añades.
O la pones entre las etiquetas httt:/rutacompleta.alaimagen.jpg


https://i.ibb.co/VDvG3jJ/firma.png

Casimiro Notevi
01-02-2020, 22:33:51
esta es la apk que lo hace perfecto creo que esta hecha en java
https://apkpure.com/digital-signature/com.rihan.digitalsignature
No hay diferencia con el ejemplo del programa que te he puesto.

juank1971
01-02-2020, 22:43:45
probe con la idea de neftali al final de la imagen y tampoco sale bien le quita puntos a la firma y queda mal.

juank1971
01-02-2020, 22:55:31
el codigo que me pusistes es con DrawLine
que en delphi pienso sea LineTo que es lo mismo dibujar una linea entre dos putos pero queda feo en delphi

es la imagen que te puse hecha con la misma idea .
pero no queda bien se ve diente de sierra en el trazo. como se puede ver en la comparacion en en la imagen anterior

mira el ejemplo hecho en delphi si lo peuebas veras lo que comento no se ve bien la firma

https://anonfile.com/h3GfKeSan7/Signature_7z

Casimiro Notevi
02-02-2020, 10:56:50
No sé, a mí me parece bien, es una firma, no creo que sea necesaria tanta precisión, aunque es mi opinión:


https://i.imgur.com/2mq2vCA.png