Einzelnen Beitrag anzeigen

Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#4

Re: EOutOfRessources bei vielen Bitmap-Operationen

  Alt 21. Jun 2005, 14:59
Hallo Marabu,

Ich hab jetzt mal die Funktion so angepasst:
Delphi-Quellcode:
procedure TMJPEGThread.GenerateBitmap;
var
  JPEGImage: TJPEGImage;
begin
  JPEGImage := TJPEGImage.Create;
  try
    JPEGImage.LoadFromStream(FAktImg);
    JPEGImage.Performance := jpBestSpeed;
    FBitmap.Assign(JPEGImage);
    ImgReady(FBitmap);
  finally
    FBitmap.Dormant;
    FBitmap.FreeImage;
    FBitmap.ReleaseHandle;
    JPEGImage.Free
  end;
end;
MemProof meldet das gleiche Problem noch in der Funktion ImgReady und zwar beim Aufruf eines Events, dem diese Funktion zugewiesen ist:
Delphi-Quellcode:
procedure TAnzeige.OnImage(Sender: TObject; _Img: TBitmap);
begin
  if Assigned(FCritSect) then begin
    FCritSect.Acquire;
    try
      if not FLocked then begin
        if not FBitmap.Empty then begin
          FBitmap.Dormant; // Free up GDI resources
          FBitmap.FreeImage; // Free up Memory. (not really needed)
          FBitmap.ReleaseHandle; // This will actually lose the bitmap (not needed)
        end;
        FBitmap.Assign(_Img);
      end;
    finally
      FCritSect.Leave;
    end;
    if GetTickCount >= (FLastImgRefresh + FMinImgRefresh) then begin
      //PostMessage(self.Handle, WM_PAINT, 0, 0);
      FFestImgReady := true;
      (sender as TImgThread).DoSynchronize(pbImg.Invalidate);
      FLastImgRefresh := GetTickCount;
    end;
  end;
end;
Weil FBitmap das OffScreen-Bitmap für eine PaintBox ist, kann ich Dormant und Co. erst vor dem nächsten Zuweisen aufrufen.

MemProof zeigt mir übrigens immer jeweils einen Fehler beim Aufruf von GenerateBitmap und einen beim Aufruf dieses Events an.

[Nachtrag zum Posting von Muetze]
Heißt das für mich, ich sollte einfach mit FreeImage und ReleaseHandle aufräumen?
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat