Bo Berglund wrote 24 lines
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