AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi EOutOfRessources bei vielen Bitmap-Operationen
Thema durchsuchen
Ansicht
Themen-Optionen

EOutOfRessources bei vielen Bitmap-Operationen

Ein Thema von Sanchez · begonnen am 21. Jun 2005 · letzter Beitrag vom 23. Jun 2005
 
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, 13: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz