Bitmap-Masken: Bereiche setzen/ausschneiden



  • Hi,

    ich habe hier ein Image und muss dazugehörend eine Maske verwalten, welche mir sagt, welche Teile im Laufe der darauf angewandten Verarbeitung aus dem Image bereits herausgeschnitten wurden, damit - bei überlappenden Schnitten - keine Bereiche doppelt verarbeitet werden. Der Ablauf ist also in etwa so:

    - aus dem Mainimage wird ein Subimage (ein rechteckiger Bereich) herausgeholt und als eigenes Image weiterverarbeitet
    - in der zugehörigen Maske wird dieser rechteckige Bereich markiert

    - aus dem Mainimage wird ein Subimage herausgeholt, ebenso wird aus der Maske eine Submaske herausgeholt, die dem gleichen rechteckigen Bereich entspricht -> beide zusammen ergeben die Information, welche Teile des zweiten (dritten,..., nten) Subimage nicht aus überlappenden Bereichen stammen und tatsächlich noch verarbeitet werden müssen

    Aus einem Image einen rechteckingen Bereich zu erhalten, ist kein Problem, hier stellt mein Toolkit (wxWidgets) eine Methode GetSubImage() zur Verfügung. Komplizierter wird es mit der Maske. wxWidgets kennt keine Images mit 1 Bit Auflösung, die ich einfach als Maske verwenden könnte, so dass ich weder die normalen Zeichenfunktionen noch GetSubImage() einsetzen kann.

    Was aber dann? Ich könnte mir einfach einen Speicherbereich anlegen, in dem jedes Bit einem Pixel im Image entspricht und dieses manuell setzen bzw. mir selber die Sub-Masken da herausberechnen.

    Allerdings klingt das für mich, als wenn ich das Rad da schon wieder neu erfinden würde - gibt es sowas nicht als fertige Lösung? Allerdings als eine Lösung, bei der ich kein 'zig MByte großes Grafiktoolkit einbinde, nur um diese paar Funktiönchen zu erhalten.

    Irgendwelche Ideen/Vorschläge, wie ich mein Problem der Maskenmanipulation (rechteckige Bereiche setzen/löschen, rechteckige Submasken extrahieren) lösen könnte ohne alles noch mal selber neu zu schreiben?

    Danke!



  • Wenn du den Alphakanal nicht schon für was anderes brauchst, dann könntest du diesen dafür verwenden.


Anmelden zum Antworten