Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   [Unit] Vektorisieren von Bitmaps (https://www.delphipraxis.net/133421-%5Bunit%5D-vektorisieren-von-bitmaps.html)

igel457 1. Mai 2009 19:53


[Unit] Vektorisieren von Bitmaps
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

ich habe heute (ich wollte das schon länger mal machen) eine kleine Unit geschrieben, die die Umrisse eines Bitmaps in ein Polygon umwandelt.

Diese Funktionalität steckt in der Unit "AdVectorize.pas". Diese hat einige kleinere Abhängigkeiten zu Andorra 2D, mit einigen kleineren Abänderungen sollte sich diese Abhängigkeit jedoch einfach entfernen lassen.

Funktionsweise:
Zunächst werden alle Randpixel des Bitmaps erkannt und in eine Liste geschrieben. Der Vektorisierungsalgorithmus nimmt den ersten Punkt aus der Liste und sucht mit sich erhöhendem Suchradius nach einem weiteren Randpixel in der Nähe. Wird ein einziger Pixel gefunden, so wird dieser an das Ergebnispolygon angehängt und die Sache beginnt von neuem. Werden zwei oder mehr Pixel gefunden, so teilt sich der Löser in zwei Hälften auf: Zwei verschiedene Pixel werden ausprobiert. Es entsteht so ein binärer Baum. Am Ende wird das "Blatt", das die meisten Randpixel verarbeitet hat, als Lösung verwendet. Sind Pixel übrig geblieben, so wird versucht auch aus diesen ein weiteres Polygon zu "basteln".

Die Idee für einen solchen Algorithmus hatte ich schon vor eins oder zwei Jahren. Darüber, wie dieses Problem standardmäßig angegangen wird habe ich mich nicht informiert.

Vielleicht kann das Ganze jemand gebrauchen. Die Lösung ist nicht die schnellste - funktioniert aber erstaunlich gut. ;-)

Im Archiv ist ein Beispielprogramm vorhanden.

Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz