freehand region erstellen



  • ich plane mein screen-capture programm um eine funktion zu erweitern mit der man einen beliebigen teil des bildschirms markiert und den dann als bitmap abspeichert. ich nehme an das funktioniert via clipping und einer entsprechenden region-funktion, allerdings fehlt mir auch nach eindringlichem durchforsten der winapi die idee welche ich da am besten verwende. CreateRectRgn und CreateRoundRectRgn fallen ja schon mal weg und bei der CreatePolyPolygonRgn-Funktion fehlen mir auch die Ideen wie ich das umsetzen könnte.
    Oder bin ich komplett auf dem Holzweg?
    Wäre für ein paar weiterführende Tips sehr dankbar.

    sansa



  • Moin,
    leg doch ein transparentes window übern desktop,
    capture WM_LBUTTONDOWN und schliesslich WM_LBUTTONUP, wenn Du dann die jeweiligen koordinaten hast, kannst du den desktop in in einem viereck, oder anderes, capturen.

    Da Du ein freehand capture dingsbums machen willst,
    kannst Du entweder A) CreateRegion
    oder b) eine bitmapmaske
    erzeugen.

    konnte ich helfen ?

    grüße



  • moin zeusosc, danke für deine antwort. leider helfen mir deine anregungen nicht wirklich weiter. vorbild für mein progie ist sowas in der art von faststone capture, falls das jemand kennt -> http://www.aplusfreeware.com/categories/mmedia/FastStoneCapture.html

    eine damit erzeugte freehand-region sieht in etwa so aus:

    http://i39.tinypic.com/2ilio29.png

    wobei ich mich auch mit geraden linien zufrieden geben würde (zumindest hab ich schon ne vorstellung wie ich da die einzelnen punkte davon abfrage).

    mein eigentliches problem liegt nun in der region-erstellung, d.h. mir erschließt sich nicht wie ich die ermitteltelten punkte via funktion weitergeben kann so dass eine korrekte region erstellt wird. bei einem simplen rechteck ist das ja kein problem, nen rechteckigen bereich markieren und abspeichern kann mein progie schon. bei soner freihandform gestaltet sichs irgendwie schwieriger, zumindest solange man -wie ich zur zeit noch- keine idee hat wie man die erstellen kann.

    gruß

    sansa


  • Mod

    Hast Du Dir überhaupt mal angesehn, wie man Regsions erzeugt?
    http://msdn.microsoft.com/en-us/library/dd162915(VS.85).aspx

    Du kannst CreatePolygonRgn/CreatePolyPolygonRgn verwenden!
    http://msdn.microsoft.com/en-us/library/dd183511(VS.85).aspx
    http://msdn.microsoft.com/en-us/library/dd183512(VS.85).aspx



  • hallo martin, ich antworte da einfach ma mit nem zitat:

    allerdings fehlt mir auch >nach eindringlichem durchforsten der winapi< die idee welche ich da am besten verwende. CreateRectRgn und CreateRoundRectRgn fallen ja schon mal weg und bei der CreatePolyPolygonRgn-Funktion fehlen mir auch die Ideen wie ich das umsetzen könnte.

    mein eigentliches problem liegt nun in der region-erstellung, d.h. mir erschließt sich nicht wie ich die ermitteltelten punkte via funktion weitergeben kann so dass eine korrekte region erstellt wird.

    wie daraus ersichtlich liegt mir das win-sdk vor und die CreatePolyPolygonRgn-Funktion war auch mein erster Gedanke. Trotzdem hab ich keinen Plan wie ich die benutzen soll. Mittlerweile tendiere ich auch eher zu der Annahme das Paths (BeginPath + drawing-functions à la LineTo + EndPath + PathToRegion) wohl die korrekte vorgehensweise wäre.
    Hatte halt gehofft hier hätte jemand Erfahrung damit, scheint wohl eher nicht so.

    thx anyway


  • Mod

    Genauso macht man es. BeginPath - Zeichnen - EndPath - PathToRegion.

    Aber wenn Du doch sowieso die einzelnen Strokes (Mauszüge aus einzelnen Punkten) würde CreatePolyRegion vollkommen ausreichen.

    BTW: Man kann mit FlattenPath auch Kurven in Geraden wandeln.


Anmelden zum Antworten