Thema: JPEG Error

Einzelnen Beitrag anzeigen

Schokohase
(Gast)

n/a Beiträge
 
#3

AW: JPEG Error

  Alt 8. Okt 2018, 22:35
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.
  Mit Zitat antworten Zitat