OpenGL in CView-Fenster - Inhalt in CImage speichern?



  • Ich weiß gar nicht, ob ich hier oder im MFC-Forum besser aufgehoben bin, aber ich versuche es jetzt mal hier.

    Ich habe folgendes Problem: Ich habe ein Anwendungsprogramm geschrieben, mit dem man reguläre mathematische Parkettierungen entwerfen kann. Die Parkettierungen werden in einem CView-Fenster angezeigt und auf Wunsch kann sich der Benutzer ein jpg oder gif dieser Parkettierung erstellen lassen.

    Das Programm läuft einwandfrei, jedoch habe ich als Grafikbibliothek GDI+ benutzt. Da das Programm allerdings demnächst durch besseres Antialiasing und Texturierung erweitert werden soll, dachte ich mir, dass ich so früh wie möglich auf OpenGL umsteige, auch wenn ich in OpenGL nicht so bewandert bin.

    Wider Erwarten war auch das nicht das Problem. Ohne größere Probleme konnte ich OpenGL (in diesem Fall Mesa3d) in ein CView Fenster einbinden und auch die Interaktion mit dem Programm klappt reibungslos.

    Einzige Schwachstelle (und die bringt mich gerade um den Verstand :D). Wie schaffe ich es OpenGL zu sagen, dass es sich in ein jpg zeichnen soll? Mit GDI+ habe ich "einfach" das CImage Handle an die OnDraw-Routine weitergeleitet, doch mit OpenGL möchte das nicht so ganz klappen. Ich habe schon die verschiedensten Dinge mit kompatiblen Bitmaps und glMakeCurrent-Anweisungen probiert - kein Erfolg. Wenn ich das CView-Handle nutze um zu blitten, erhalte ich nur einen weißen Bereich.

    Hat jemand einen Tipp für mich, wie ich das am einfachsten schaffen kann?



  • warum machste nicht einfach nen screenshot und speicherst den?



  • Der Benutzer hat die Möglichkeit seine Parkettierungen in einer beliebigen Auflösung zu speichern - auch in Auflösungen, die weit über die Darstellungsfähigkeit der Bildschirmauflösung gehen (für Papierdruck, etc...). Dies kann ich meines Wissens mit einem Screenshot nicht abdecken und selbst wenn: es wäre kein gutes Anwendungsprogramm, wenn man seinen Benutzer dazu zwingt manuell Screenshots zu erstellen, wenn es das Programm doch auch so können sollte.


Anmelden zum Antworten