Ja, die FMX-Objekte selber haben nicht jeweils einen eigenen Canvas, sondern teilen sich den Anzeigebereich mit der Form.
Es ist der falsche Ansatz, von außen auf die Anzeige-Elemente zeichnend zuzugreifen (also hier im Button-Click-Event), da diese sich ja auch selbst zeichnen müssen, wenn man ein anderes Formular über das Anzeige-Element schiebt.
Daher besser das Painting-Event des Controls verwenden, da erhält man auch direkt den Anzeigebereich übergeben.
So funktioniert es (mit Deinem ersten Ansatz):
Delphi-Quellcode:
procedure TForm33.Image1Painting(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);
var
MyRect: TRectF;
c : Tcanvas;
begin
MyRect.Create(1, 1, 150, 200);
c := canvas; //Image1.Canvas;
c.BeginScene;
c.Stroke.Kind := TBrushKind.Solid;
c.Stroke.Color := TAlphaColors.Blue;
c.Stroke.Thickness := 2;
c.DrawRect(MyRect, 10, 10, AllCorners, 1.0);
c.EndScene;
end;