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
unit UfreeHand; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects, system.Generics.Collections, FMX.Controls.Presentation, FMX.StdCtrls; type TSigCapRec = Record CurPos: TpointF; PosState: Byte; end; TForm3 = class(TForm) image1: TImage; procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Image1DblClick(Sender: TObject); procedure image1Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); private { Private declarations } public Signature: Tlist<TsigCapRec>; Boton: Boolean; procedure AddPoint(Const aX, aY: Single; Const aState: Byte); end; var Form3: TForm3; implementation {$R *.fmx} { TForm3 } procedure TForm3.AddPoint(const aX, aY: Single; const aState: Byte); var P: TsigCapRec; begin p.CurPos := PointF(ax, ay ); p.PosState := astate; if p.PosState <> 1 then signature.Add(P) else if p.CurPos.Distance(signature.Last.CurPos) > 6.0 then signature.Add(P); image1.Repaint; end; procedure TForm3.FormCreate(Sender: TObject); begin Signature := Tlist<TSigCapRec>.create; end; procedure TForm3.FormDestroy(Sender: TObject); begin FreeandNil(Signature); end; procedure TForm3.Image1DblClick(Sender: TObject); begin image1.Bitmap.SaveToFile('C:\Dentus\Diente.jpg'); end; procedure TForm3.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); begin if ssleft in shift then if not boton then begin addpoint(x,y,0); boton := true; end else addpoint(x,y,1); end; procedure TForm3.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin boton := false; addpoint(x,y,2); end; procedure TForm3.image1Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); var P: TsigCapRec; P1, P2: TpointF; begin if not (signature.Count-1 > 0 ) then Exit; image1.Bitmap.canvas.Stroke.Dash := Tstrokedash.Solid; image1.Bitmap.canvas.Stroke.Thickness := 10; image1.Bitmap.canvas.Stroke.Color := Talphacolorrec.Blue; image1.Bitmap.Canvas.BeginScene; for p in signature do case P.PosState of 0: p1 := p.CurPos; 1: begin p2 := p.CurPos; image1.Bitmap.canvas.DrawLine(p1,p2,1,image1.Bitmap.canvas.Stroke); p1 := p.CurPos; end; 2: begin p2 := p.CurPos; image1.Bitmap.Canvas.DrawLine(p1,p2,1,image1.Bitmap.canvas.Stroke); end; end; image1.Bitmap.Canvas.EndScene; end; end.