On 2021/04/29 17:49, Bo Berglund via lazarus wrote:
I have an application which can capture a regon of the desktop into an image.
It uses TBgraBitmap since it has a method for grabbing data from the screen.

So I can assign this to the clipboard and also save to a file:

var
   MyCapture : TBgraBitmap;
   Clip: TRect;
   ...
begin
   ...
   Clip := Bounds(Self.Left, Self.Top, Self.Width, Self.Height);
   MyCapture := TBgraBitmap.Create();
   MyCapture.TakeScreenShot(Clip);
   Clipboard.Assign(MyCapture.Bitmap);
   MyCapture.Bitmap.SaveToFile(ChangeFileExt(ParamStr(0), '.jpg'));
   MyCapture.Free;
   ...
end;

But the SaveToFile results in a file that is NOT a jpeg file at all...

How could I save it to a specific (known) format, like jpg or png?

Essentially you are asking a BGRA Bitmap to save itself to file, it is irrelevant whether the file ends in .jpg or .moonmission (although a TPicture or some custom image components may check the file extension).

What you need is to create a JPEG object, put the data in it and then use its JPEG-machinery to save the file.

I haven't tested this, typing from my head so may make syntax errors or such, but the idea is sound:

var
  jpg : TJPEGImage;

...

    jpg := TJPEGImage.Create;
    jpg.Assign(MyCapture.Bitmap);
   ... perhaps adjust the JPEG quality parameters etc.
    jpg.SaveToFIle('somefile.jpg');
    jpg.Free;

...

Note that this "jpg.SaveToFIle('somefile.jpg')" statement will ALWAYS save JPEG data to the file, even if the given filename ends in  .png or .bmp or .mooseknuckle



--
_______________________________________________
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus

Reply via email to