Ir al contenido



Foto

Almacenar Coordenadas de un Timage en Base de datos


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

#1 el-mono

el-mono

    Advanced Member

  • Miembros
  • PipPipPip
  • 112 mensajes

Escrito 10 octubre 2017 - 09:13

Hola gente linda, necesito de sus conocimientos para resolver esto. Lo que necesito  es sobre un Timage permitir dibujar lineas a mano alzada a mis clientes y luego almacenar las coordenadas obtenidas en una base de datos para luego volver a dibujarlas en otra oportunidad. 
 
Ustedes se preguntaran porque no guardo el Timage como imagen y luego lo levanto ? lo que sucede es que a medida que se guarda como imagen las lineas dibujadas van perdiendo calidad y se ve muy descolorido.
 
Para resolverlo me guié del  ejemplo que esta en la pagina de Quark Cube https://www.youtube....h?v=TnlgvN0RBiM
 
Lo que me gustaría hacer es almacenar las coordenadas que obtuve y guardarlas en una tabla. A continuación  el código que tengo, solo coloque un Form y un Timage


delphi
  1. unit UfreeHand;
  2.  
  3. interface
  4.  
  5. uses
  6.   System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  7.   FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects, system.Generics.Collections,
  8.   FMX.Controls.Presentation, FMX.StdCtrls;
  9.  
  10. type
  11.   TSigCapRec = Record
  12.   CurPos: TpointF;
  13.   PosState: Byte;
  14.   end;
  15.  
  16.   TForm3 = class(TForm)
  17.     image1: TImage;
  18.     procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  19.       Y: Single);
  20.     procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
  21.       Shift: TShiftState; X, Y: Single);
  22.     procedure FormCreate(Sender: TObject);
  23.     procedure FormDestroy(Sender: TObject);
  24.     procedure Image1DblClick(Sender: TObject);
  25.     procedure image1Paint(Sender: TObject; Canvas: TCanvas;
  26.       const ARect: TRectF);
  27.   private
  28.     { Private declarations }
  29.   public
  30.     Signature: Tlist<TsigCapRec>;
  31.     Boton: Boolean;
  32.     procedure AddPoint(Const aX, aY: Single; Const aState: Byte);
  33.   end;
  34.  
  35. var
  36.   Form3: TForm3;
  37.  
  38. implementation
  39.  
  40. {$R *.fmx}
  41.  
  42. { TForm3 }
  43.  
  44. procedure TForm3.AddPoint(const aX, aY: Single; const aState: Byte);
  45. var
  46.  P: TsigCapRec;
  47. begin
  48.   p.CurPos := PointF(ax, ay );
  49.   p.PosState := astate;
  50.  
  51.   if p.PosState <> 1 then
  52.      signature.Add(P)
  53.   else
  54.      if p.CurPos.Distance(signature.Last.CurPos) > 6.0 then
  55.         signature.Add(P);
  56.  
  57.    image1.Repaint;
  58.  
  59.  end;
  60.  
  61.  
  62.  
  63. procedure TForm3.FormCreate(Sender: TObject);
  64. begin
  65.   Signature := Tlist<TSigCapRec>.create;
  66. end;
  67.  
  68. procedure TForm3.FormDestroy(Sender: TObject);
  69. begin
  70.   FreeandNil(Signature);
  71. end;
  72.  
  73. procedure TForm3.Image1DblClick(Sender: TObject);
  74. begin
  75.   image1.Bitmap.SaveToFile('C:\Dentus\Diente.jpg');
  76. end;
  77.  
  78. procedure TForm3.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  79.   Y: Single);
  80. begin
  81.   if ssleft in shift then
  82.      if not boton then
  83.         begin
  84.            addpoint(x,y,0);
  85.            boton := true;
  86.         end
  87.           else
  88.             addpoint(x,y,1);
  89. end;
  90.  
  91. procedure TForm3.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  92.   Shift: TShiftState; X, Y: Single);
  93. begin
  94.   boton := false;
  95.   addpoint(x,y,2);
  96. end;
  97.  
  98. procedure TForm3.image1Paint(Sender: TObject; Canvas: TCanvas;
  99.   const ARect: TRectF);
  100. var
  101.    P: TsigCapRec;
  102.    P1, P2: TpointF;
  103. begin
  104.    if not (signature.Count-1 > 0 ) then Exit;
  105.  
  106.  
  107.     image1.Bitmap.canvas.Stroke.Dash := Tstrokedash.Solid;
  108.     image1.Bitmap.canvas.Stroke.Thickness := 10;
  109.     image1.Bitmap.canvas.Stroke.Color := Talphacolorrec.Blue;
  110.     image1.Bitmap.Canvas.BeginScene;
  111.     for p in signature do
  112.        case P.PosState of
  113.           0: p1 := p.CurPos;
  114.           1: begin
  115.               p2 := p.CurPos;
  116.               image1.Bitmap.canvas.DrawLine(p1,p2,1,image1.Bitmap.canvas.Stroke);
  117.               p1 := p.CurPos;
  118.           end;
  119.           2: begin
  120.              p2 := p.CurPos;
  121.              image1.Bitmap.Canvas.DrawLine(p1,p2,1,image1.Bitmap.canvas.Stroke);
  122.           end;
  123.        end;
  124.  
  125.       image1.Bitmap.Canvas.EndScene;
  126.  
  127. end;
  128.  
  129. end.


  • 0