@Hagen: wie eine Region intern gespeichert wird weiß ich natürlich auch nicht.
Das "unschöne" beim Ergebnis von GetRegionData ist, dass es jeweils auf ganze Pixel gerundete Koordinaten sind und eben nicht mehr Kurven.
@Kalmi: meine "mathematische" Lösung wird ähnlich funktionieren:
Voraussetzungen:
- Ich gehe aus von einer Pinselform, die über eine konvexe geschlossene Beziér-Kurve definiert ist.
- Ich zerlege den Pfad in mehrer Einzelpfade (wenige müssten reichen, muss ich noch testen), wobei ich allerdings nicht in Linien sondern in kleinere Beziér-Kurven aufteile.
1. Für jeden Teilpfad A(BC)D (A=Startpunkt, B+C=Stützpunkte, D=Endpunkt) sind die Richtungen im Start- und Endpunkt gegeben durch die Strecken (AB) und (
DC).
2. Zu jeder Richtung lege ich äußere Tangenten an die Pinselkurve und durch die Berührungspunkte habe ich jeweils den "Versatz" zum Pinselmittelpunkt. Dies sollte berechnungstechnisch einfach auf die Ermittlung der Nullstellen einer quadratischen Funktion hinauslaufen.
3. Daraus berechne ich zwei neue Beziér-Kurven, die die beiden Ränder der Kurvenlinie beschreiben.
4. An den Enden setze ich jeweils die durch die Berührungspunkte aus [2] definierten Halbformen des Pinsels an.
5. "Glatte" Teilsegmente kann man direkt verbinden, bei "spitzen" muss man außen wie an den Enden ebenfalls einen Teil der Pinselkurve einsetzen und innen den Schnittpunkt ermitteln.