myimg.Picture.Bitmap
wird nicht freigegeben. myimg.Picture.Bitmap.Free();
kann man nicht aufrufen. Korrekt weist man Bilder mit myimg.Picture.Assign(Bild);
zu, da wird das alte Bild gelöscht.
Das stimmt so nicht.
Wenn
TPicture.Bitmap
etwas zugewiesen wird, dann erfolgt intern ein Assign.
Es ist also wurscht ob man
pic.Bitmap := myBmp;
oder
pic.Bitmap.Assign(myBmp);
schreibt, denn es passiert das Gleiche.
Was hier nicht freigegeben wird, ist die Bitmap-Instanz die man per
GetScreenshot
holt.
Delphi-Quellcode:
Function SaveShotToStream(PIC: TBitmap): AnsiString;
var
myjpg: TJPEGImage;
myImg: TImage;
mm: TMemoryStream;
bmp: TBitmap;
begin
mm := TMemoryStream.Create;
myImg:= TImage.Create(nil);
myjpg := TJPEGImage.Create;
myjpg.CompressionQuality := 50;
myjpg.Compress;
bmp := GetScreenShot;
try
myimg.Picture.Bitmap := bmp;
finally
bmp.Free;
end;
myjpg.Assign(myimg.Picture.Bitmap);
myjpg.SaveToStream(mm);
myImg.Free;
myjpg.Free;
mm.Free;
end;
Allerdings ist der Umweg über
TImage
hier nicht notwendig und
bmp
könnte man gleich
myjpg
zuweisen.