CImage::Attach funktioniert nicht?



  • Ich habe da wieder mal ein Problem; nachdem ich das letzte Mal drauf gekommen bin schaffte ich es diesmal nicht; und zwar wollte ich ein HPITMAP mit Attach an ein CImage-Objekt anfügen. Das Bild bleibt aber immer leer. Ich habe folgenden Code:

    inline void RotateImage90(HDC hDC)
    {
    	if(img.IsIndexed())
    {
    	if(AfxMessageBox("Sie haben ein Bild mit indizierten Farben; wenn Sie es mit diesem Programm bearbeiten wird es in ein Bild mit 32bit Farbtiefe ohne Palette umgewandelt. Wollen Sie fortfahren?",MB_YESNO|MB_ICONINFORMATION)==IDNO)
    	  return;
    }
    
    CImage img1; //img ist auch ein CImage Objekt->Quellbild
    
    img1.Attach(Rotate90(hDC, img)); //das geht nicht! 
    
    img1.ReleaseDC(); 
    
        //img = img1;
    	img.Destroy(); img.Create(img1.GetWidth(), img1.GetHeight(),32);
    	img1.BitBlt(img.GetDC(),0,0,SRCCOPY);
    	img.ReleaseDC();
    

    die "Rotate90"-Funktion will ein HBitmap und einen HDC und gibt ein HBITMAP zurück. Habe es auch schon mit anderen HDCs (img, img1) probiert.
    Muss etwas kleines mit freigeben sein? Ich meinte ein oder zwei Mal hätte es funktioniert aber ich glaube ich spinne, kann ja wohl kaum sein dass es sich nicht bei allen Dateien gleich verhält... 😕
    Vielen Dank!



  • Warum hast du die inline void RotateImage90(HDC hDC) mit Hingeschrieben aber aufrufen tust du die Funktion Rotate90(hDC, img), also irgendwie sieht das komisch aus, gibt Rotate90(hDC, img) Wirklich ein Handle zurück und wenn ist das auch gültig? Hast du mal mit dem Debuger geschaut?

    Hast du dir den DC von img1 geholt weil du img1.ReleaseDC() aufrufst? Das selbe bei img, du mußt das Attache von img1 auch mit Detache wieder frei geben und nicht ReleaseDC() aufrufen.

    vielleicht kommst du so weiter oder kannst Licht in das dunkel bringen



  • Ich rufe natürlich nicht die FUnktion rekursiv in der selben Funktion auf; ist vielleicht etwas verwirrend aber es ist so; die RotateImage90(HDC hDC) wird in einem Ereignishandler aufgerufen und diese ruft dann Rotate90(hDC, HBITMAP) auf. CImage hat ja einen überladenen HBITMAP-Operator deshalb wird das Objekt ja akzeptiert.
    Die Rotate90-Funktion fand ich als ich eine Funktion zum drehen um 90 Grad suchte (zuerst fand ich eíne andere zum stufenlos drehen welche HDIBs verlangte und das bekam ich nicht hin, da fand ich diese C-Funktion und dachte die ist einfacher).
    Ich denke/hoffe diese Funktion wird schon funktionieren; allerdings war als ich im Debugger schaute nach dem Attach das img1 leer, nur die Variablen für die Grösse wurden belegt.
    Ja stimmt das mit dem ReleaseDC überlegte ich mir, ich kommentierte es auch schon aus aber das half nichts, Detach habe ich ebenfalls mal versucht.
    Falls gerade jemand eine Funktion zum drehen (um 90 Grad reicht) zur Hand hat, welche sicher geht würde ich natürlich auch eine andere nehmen.



  • sie haben Post, vielleicht kommste so weiter



  • Super, vielen Dank! Werde ende Woche wieder weitermachen. Vielleicht finde ich da noch mehr Funktionen die ich brauche. Danke 🙂


Anmelden zum Antworten