Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
941 Beiträge
 
Delphi XE2 Professional
 
#1

Bitmaps vergleichen

  Alt 9. Jul 2020, 18:25
Hier https://www.delphipraxis.net/204093-...ermitteln.html wurde seinerzeit gefragt, wie man in 2 Bitmaps mit gleicher Größe, die sich nur in einem bestimmten rechteckigen Bereich voneinander unterscheiden und ansonsten identischen Inhalt haben, diesen Bereich möglichst schnell (< 1 Sekunde) ermitteln kann.
Ich hatte seinerzeit eine kleine Funktion gepostet, die diese Aufgabe erledigte und dafür, bei Bitmaps mit ca. 16 MPixeln, < 50 ms brauchte.
Da mich das Thema interessierte, habe ich mich etwas intensiver damit beschäftigt und ein Programm erstellt, das einiges mehr kann, als die seinerzeit gepostete Funktion.
Das Programm, Stand Juli 2020, unterstützt im Wesentlichen folgende Aktivitäten.
- Bilder laden.
Unterstützt werden die Formate *.Bmp;*.Gif;*.Jpg;*.Png;*.Tif;*.Wmf;*.Emf.
Bei Formaten <> *.Bmp werden die Bilder in 24Bit-Bitmaps umgewandelt.
- Komplette Bitmaps vergleichen
- Einen definierten rechteckigen Bereich vergleichen.
- 2 gleichgroße rechteckige Bereiche vergleichen die an unterschiedlichen Positionen liegen.
- Die Bitmaps anzeigen.
Die Bitmaps, die verglichen werden, dürfen unterschiedliche Pixelformate haben.
Unterstützt werden die Formate pf1bit, pf4bit, pf8bit, pf15bit, pf16bit, pf24bit, pf32bit,
Nach Laden von Bildern werden diese automatisch verglichen und folgende Daten ermittelt und angezeigt:
- Rechteck, innerhalb dessen Unterschiede gefunden wurden.
- Liste der unterschiedlichen Pixel.
- Liste welche Farben wie oft in den Bitmaps vorkommen.

Im Anhang sind das Programm (.exe), alle Source-Codes (hoffentlich nichts vergessen) und eine ausführliche .hlp Datei.
Die mitgelieferte .exe ist eine 32Bit Version, das Ganze sollte aber auch für 64Bit kompilierbar sein.
Ich habe eine kontext-sensitive implementiert, die mit F1 aufgerufen wird.
Es wird hierbei versucht, die Hilfe zu dem Objekt zu zeigen, auf das die Maus zeigt.
Das sollte projektweit funktionieren, auch für die Einträge von Menus, hier aber nur auf der untersten Ebene.

Tipp:
Da das Programm auch unterschiedliche Farbmodelle (HSB, HSL, XYZ, CMY) unterstützt wird beim Programmstart eine Farbtabelle erzeugt, die die Daten für Umwandlung von RGB nach HSB, HSL und XYZ enthält.
Um die volle Funktionalität des Programms zu erhalten sollte nach dem ersten Programmstart mit Menu > Datei > "Farbtabelle um RAL-Farben ergänzen" die Farbtabelle vervollständigt werden (dauert ca. 35 s, deshalb nicht automatisch) und anschließend die Tabelle mit Menu > Datei > "Farbtabelle speichern" gespeichert werden.
Bei anschließenden Programmstarts wird dann die Tabelle aus dieser Datei geladen.

Vielleicht interessiert das den einen oder anderen.
Das Programm enthält sicher noch einige Bugs - wer solche findet, bitte posten, ggfs. auch als PN.
Angehängte Dateien
Dateityp: zip DeltaRect.zip (1,55 MB, 25x aufgerufen)
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat