Search code examples
delphicanvasdelphi-xe2timage

TImage picture disappears when reading its canvas?


I have a simple TImage control on a form. I've assigned a Bitmap image at design-time. When running, I read the canvas using TImage.Picture.Bitmap.Canvas. Everything works fine. Then, I load a JPEG image in design-time. However, now when I read this canvas, suddenly the picture disappears.

Why does this happen and how can I avoid it?

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  Canvas: TCanvas;
begin
  Canvas:= Image1.Picture.Bitmap.Canvas;
  //Do something with Canvas, but canvas is empty and image disappeared
end;

Solution

  • This is expected, since a JPG image simply isn't a bitmap (BMP) image.

    You have to convert it to a bitmap in order to do something with it:

    var
      bm: TBitmap;
    begin
      bm := TBitmap.Create;
      try
        bm.Assign(Image1.Picture.Graphic);
        bm.Canvas.DoSomethingReallyAwesome(ttExtraAwesome);
        bm.SaveToFile('C:\Users\Andreas Rejbrand\Desktop\test5.bmp');
      finally
        bm.Free;
      end;