AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Screenshot mit Bitmap vergleichen

Offene Frage von "KahPee"
Ein Thema von KahPee · begonnen am 7. Jan 2010 · letzter Beitrag vom 8. Jan 2010
Antwort Antwort
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#1

Screenshot mit Bitmap vergleichen

  Alt 7. Jan 2010, 20:50
Hallo,

ich habe bei einem Projekt vor zwei Bilder zu vergleichen. Als allererstes soll von einem Fenster ein Screenshot gemacht werden (ich denk mal das krieg ich hin). Anschließend soll der Screenshot mit einem anderen Bild aus einer Datei verglichen werden. Auch das Vergleichsbild ist ein Bitmap. Ich möchte jetzt auf keinen Fall die ganzen Bilder vergleichen. Vielmehr habe ich nur lauter Bildausschnitte die mit dem Screenshot verglichen werden sollen. Als Ergebnis möchte ich nur Wissen ob es eine Übereinstimmung gibt oder keine!

Da ich diesen Prozess immer wieder durchführen will möchte ich am liebsten eine Funktion, wo ich
1. Screen
2. Vergleichsbild
3. linke obere Ecke (left,top) wo das Vergleichsbild auf dem Screen verglichen wird

Vor allem durch den dritten Punkt erspare ich mir viel Rechenzeit, da so nicht immer das ganze Bild abgesucht wird. Ich möchte halt nur gucken welches Bild an einer bestimmten Stelle ist.
Nun habe ich gelesen, dass Screenshots nicht unbedingt vergleichbar sind, da jeder Destop andere Grafikeinstellungen vorweist. Ist es möglich die Funktion anzupassen, sodass dieser Umstand berücksichtigt wird?

Außerdem interessiert mich ob ich bei einem Bitmapvergleich immer die ganze Zeile vergleichen muss! Mir reichen unter Umständen wenige Pixel an bestimmten Bildstellen.

Vielen Dank schon mal im vorraus für mögliche Lösungshilfen und Lösungsvorschlägen.

mfg KahPee
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Screenshot mit Bitmap vergleichen

  Alt 7. Jan 2010, 21:11
Hallo,

mindestens 2 Lösungen, um Bilder zu vergleichen findest du in der DP:

Bildvergleich mit Summe der quadratischen Unterschiede (SSD)
Bildvergleich mit ZeroMeanNormalizedCross-Correlation (ZNCC)

Wenn du nur ganz bestimmte Pixel vergleichen möchtest (Koordinaten vorgegeben), könntest du das auch so machen:

if Canvas1.Pixels[x, y] = Canvas2.Pixels[x, y] then Wenn du Bilder pixelgenau vergleichen möchtest, kannst du diesen Code natürlich auch in einer Schleife für einen bestimmten Bildausschnitt nutzen. Nur musst lediglich die Koordinaten wissen und die kennst du, wenn ich das richtig verstanden habe.
Das Vergleichen von Bitmaps sollte unabhängig von den Farbeinstellungen von Desktop/Monitor sein. Die Farbwerte sind im Bild hinterlegt und das vergleichst du. Egal ob ein Bildschirm das etwas heller oder dunkler anzeigt.

Grüße, Matze
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Screenshot mit Bitmap vergleichen

  Alt 8. Jan 2010, 05:46
Zitat von Matze:
Das Vergleichen von Bitmaps sollte unabhängig von den Farbeinstellungen von Desktop/Monitor sein. Die Farbwerte sind im Bild hinterlegt und das vergleichst du. Egal ob ein Bildschirm das etwas heller oder dunkler anzeigt.
In dem Thread wo ich gelesen habe, dass es dabei zu Problemen kommen kann ging es glaube ich weniger um die Helligkeit, sondern um die Farbtiefe.

mfg KahPee
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Screenshot mit Bitmap vergleichen

  Alt 8. Jan 2010, 09:31
Hallo!

Vielleicht kannst Du noch ein bischen mehr verraten, was Du machen willst...

Ist das Vergleichsbild auf dem gleichen Computer erstellt worden?

Willst Du auf gleich oder auf ähnlich abprüfen?

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Screenshot mit Bitmap vergleichen

  Alt 8. Jan 2010, 12:27
Das Vergleichsbild wird aus einer Datei ausgelesen, das Bild erstelle ich selber. Allerdings soll das Programm wenn möglich auf mehrern PC laufen können. Wichtig ist, dass keine Verwechslung möglich ist also eigentlich eher auf gleich. Das ganze soll zum auslesen benutzt werden.
if match von zwei Bildern dann mach irgendetwas.

mfg KahPee

edit: Was ich nicht nicht erwähnt hatte, war dass das ganze mögichst schnell laufen sollte ,
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Screenshot mit Bitmap vergleichen

  Alt 8. Jan 2010, 13:27
Das Problem ist hier die möglichen unterschiedlichen Farbtiefen des Ziel-PC's

Wenn es nicht der "richtige" Farbwert sein muss würde ich not(clWhite) testen...

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Screenshot mit Bitmap vergleichen

  Alt 8. Jan 2010, 13:34
Kann man die Farbtiefen den Auslesen? Das man also auf meinem PC die Vergleichscreens macht. Und dann auf anderren PC die Pixelveränderung mit einberechnen!

mfg KahPee
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Screenshot mit Bitmap vergleichen

  Alt 8. Jan 2010, 13:37
Wie wäre es denn die Vergleichsbilder in allen möglichen Farbtiefen vorzuhalten, auf dem Ziel-PC die benutzte Einstellung zu ermitteln, und einfach die entsprechenden Bilder zu nehmen? Immerhin sind heutzutage schlimmstenfalls 24/32 Bit und 16 Bit noch relevant, wobei 16Bit schon arg selten sein dürfte. 32 und 24 Bit unterscheiden sich in den Farbinformationen zudem nicht, es ist im Wesentlichen das selbe gemeint, nur dass bei 32Bit noch ein Alphakanal dazu kommt, der aber hier keine Rolle spielt. Ich wüsste nicht wo noch 256 Farben (also 8 Bit) genutzt werden, solange wir über PCs sprechen. Sollten noch mobile Geräte eine Rolle spielen, hat man evtl. noch mit 8 Bit, und ggf. 18 und 12 Bit zu tun, diese "krummen" gibt's aber auf PCs praktisch nicht.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 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