Buenas a todos.
Lo que necesito es darle la posibilidad al usuario de dibujar a mano alzada sobre el canvas de un Timage y luego guardar lo que esta persona dibujo en la base de datos firebird.
Existe alguna técnica para hacer algo parecido a esto ?
Entiendo que puedo guardar como una imagen el canvas y meterlo en un campo Blob, quería saber si existe o alguno conoce alguna otra técnica para ello ?
Dibujar a mano alzada sobre canvas y guardar en Base de datos
Started by
el-mono
, Aug 04 2014 04:24 PM
2 replies to this topic
#1
Posted 04 August 2014 - 04:24 PM
#2
Posted 04 August 2014 - 05:00 PM
Existe y es muy sencillo. El problema debe ser separado en dos partes.
1. Dibujar en el canvas
2. Guardar en un blob
Para dibujar en el canvas solo debes una TImage y trazar sobre su objeto Canvas utilizando sus funciones cada vez que se producen los eventos del ratón OnMouseMove, OnMouseDown, OnMouseUp;
La verdad, no podría darte una técnica exacta, ya que en mi caso implementé colorear y no trazar, pero es igual de sencillo.
Te recomiedo conocer las funciones y propiedades de Canvas que encierran todo lo que tiene que ver con el DC (device context) para imágenes.
Al Timage lo puedes crear en tiempo de diseño con el componente TImage en componentes adicionales, o crearlo en tiempo de ejecución.
donde Self sería el handle del form en el que se encontraría el bitmap.
Creo que Pixels cambia el color de cada pixel de la imagen, por lo que te serviría en la captura de OnMouseMove.
donde imgPizarra es de tipo TImage.
La clase TImage puede ser instanciada como cualquier otra, incluso puedes cargar una imagen Bitmap en blanco u otro color con LoadFromFile.
En vez de clBlack, clRed, clBlue, etc. puedes utilizar la función RGB, la cual te permite convertir cualquier combinación RGB a su correspondiente número entero. clAAA, son valores para colores conocidos.
Para guardar el bitmap en un campo blob de Firebird, tienes que definir somo BLOB subtype 0 al definir el campo,
Para poder almacenar el bitmap, debes asignar el bitmap al bitmap del campo imagen correspondiente y salvarlo.
El componente TDBImage de los componentes de Interbase debería ser suficiente, pero en caso de querer guardarlo a partir de un TImage, deberás hacer uso de TStream.
El ejemplo que podría poner aquí es bastante engorroso porque convierte a JPEG en ambos sentidos para almacenar el bitmap.
Espero no haberme salteado nada importante y no equivocarme mucho y que esto te sirva de algo.
Saludos.
1. Dibujar en el canvas
2. Guardar en un blob
Para dibujar en el canvas solo debes una TImage y trazar sobre su objeto Canvas utilizando sus funciones cada vez que se producen los eventos del ratón OnMouseMove, OnMouseDown, OnMouseUp;
La verdad, no podría darte una técnica exacta, ya que en mi caso implementé colorear y no trazar, pero es igual de sencillo.
Te recomiedo conocer las funciones y propiedades de Canvas que encierran todo lo que tiene que ver con el DC (device context) para imágenes.
Al Timage lo puedes crear en tiempo de diseño con el componente TImage en componentes adicionales, o crearlo en tiempo de ejecución.
delphi
imgPizarra:= TImage.Create(Self);
donde Self sería el handle del form en el que se encontraría el bitmap.
Creo que Pixels cambia el color de cada pixel de la imagen, por lo que te serviría en la captura de OnMouseMove.
delphi
imgPizarra.Canvas.Pixels[XPos, YPox]:= clBlack;
donde imgPizarra es de tipo TImage.
La clase TImage puede ser instanciada como cualquier otra, incluso puedes cargar una imagen Bitmap en blanco u otro color con LoadFromFile.
delphi
imgPizarra.Picture.Bitmap.LoadFromFile('nombre.bmp');
En vez de clBlack, clRed, clBlue, etc. puedes utilizar la función RGB, la cual te permite convertir cualquier combinación RGB a su correspondiente número entero. clAAA, son valores para colores conocidos.
Para guardar el bitmap en un campo blob de Firebird, tienes que definir somo BLOB subtype 0 al definir el campo,
Para poder almacenar el bitmap, debes asignar el bitmap al bitmap del campo imagen correspondiente y salvarlo.
El componente TDBImage de los componentes de Interbase debería ser suficiente, pero en caso de querer guardarlo a partir de un TImage, deberás hacer uso de TStream.
El ejemplo que podría poner aquí es bastante engorroso porque convierte a JPEG en ambos sentidos para almacenar el bitmap.
Espero no haberme salteado nada importante y no equivocarme mucho y que esto te sirva de algo.
Saludos.
#3
Posted 06 August 2014 - 12:25 PM
muchas gracias Cram, voy a probar con lo que me aconsejas.
Saludos
Saludos