Ir al contenido


Foto

Dibujar a mano alzada sobre canvas y guardar en Base de datos


  • Por favor identifícate para responder
2 respuestas en este tema

#1 el-mono

el-mono

    Advanced Member

  • Miembros
  • PipPipPip
  • 137 mensajes

Escrito 04 agosto 2014 - 04:24

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 ?

:smiley:
  • 0

#2 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 824 mensajes
  • LocationMisiones, Argentina

Escrito 04 agosto 2014 - 05:00

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.


delphi
  1. 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
  1. 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
  1. 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.

  • 0

#3 el-mono

el-mono

    Advanced Member

  • Miembros
  • PipPipPip
  • 137 mensajes

Escrito 06 agosto 2014 - 12:25

muchas gracias Cram, voy a probar con lo que me aconsejas.

Saludos

  • 0