GDI+ Bitmap löschen bzw. wieder freigeben



  • Hallo Leute,

    ich komme gleich zum Punkt. Ich erzeuge ein Bitmap mit:

    // Bitmap laden
    CString strTmpx;
    strTmpx = m_strPfadBild + "file.bmp";
    Bitmap bm1(CA2W(strTmpx.GetString()),0);
    

    Jetzt hol ich mir die nötigen Daten aus dem Bild und will es wieder freigeben, denn solange das Objekt angelegt ist, kann ich die Datei nicht mehr von Hand löschen. ( Erst wenn ich das komplette Programm beende ).

    Weiss jemand wie ich das Bild wieder freigebe ? Ein anderes Bild laden hilft nichts ... Leider 😞



  • Hat niemand eine Idee ?



  • Normalerweise wird doch das Bitmap-Objekt zerstört, wenn es den Scope (Gültigkeitsbereich) verlässt.
    Ich kann mir aber nicht vorstellen, das du das Objekt nur in einer lokalen Funktion drin hast, weil sonst könntest du es nicht an anderer Stelle benutzen.
    Solange das Objekt jedenfalls existiert, ist die Datei geöffnet.

    Wenn du die Datei löschen willst, obwohl das Bitmap im Speicher gehalten wird, mußt du das Bitmap-Objekt unabhängig von der Datei im Speicher kopieren. Und danach das ursprüngliche Bitmap-Objekt zerstören lassen.

    Ich schätze mal, die clone-Methode kann einem hier weiter helfen:

    Bitmap* createBitmap()
    {
        Bitmap bmp(L"Datei.jpg");
        Bitmap *clone= dynamic_cast<Bitmap*>(bmp.clone());
        return clone;
    } // bmp wird autom. am Scope-Ende zerstört
    

    Falls das clone() auch das Datei-Handle mitkopieren sollte, wäre evtl. eine CachedBitmap eine Alternative:
    http://msdn.microsoft.com/en-us/library/ms533835(VS.85).aspx


Log in to reply