vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Grafik und Font · Bilder und Icons   |   VB-Versionen: VB2005, VB200806.11.09
Prüfen, ob zwei Bilder identisch sind

Dieser Tipp stellt eine Funktion zur Verfüfung, mit der sich prüfen lässt, ob es sich bei 2 angegebenen Bildern um identische Bilder handelt.

Autor:   Dieter OtterBewertung:  Views:  12.500 
www.tools4vb.deSystem:  Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Wie lassen sich zwei Bilder auf "Gleichheit" prüfen?

Die Equals-Eigenschaft des Image/Bitmap-Objekts scheidet in diesem Falls aus:

If Bitmap1.Equals(Bitmap2) Then ...

Um zwei Bilder miteinander zu vergleichen gibt es mehrere Möglichkeiten: Eine wäre ein Pixel-für-Pixel Vergleich, was jedoch zugegebenermaßen nicht gerade performant ist.

Eine andere Möglichkeit wäre, das Bitmap/Image in ein Byte-Array zu konvertieren und den jeweiligen Hash-Wert miteinander zu vergleichen.

Und genau das macht nachfolgende Funktion:

''' <summary>
''' Vergleicht zwei Bitmaps miteinader.
''' </summary>
''' <param name="Bitmap1">Bitmap oder Image</param>
''' <param name="Bitmap2">Bitmap oder Image</param>
''' <returns>True, wenn die Bitmaps identisch sind, andernfalls False.</returns>
Public Function BitmapsEqual(ByVal Bitmap1 As Bitmap, ByVal Bitmap2 As Bitmap) As Boolean
  Dim bResult As Boolean = False
 
  ' Stimmt die Größe überein...
  If Bitmap1.Size = Bitmap2.Size Then
    ' ... Bitmaps in Byte-Array konvertieren
    With New System.Drawing.ImageConverter()
      Dim Bytes1 As Byte() = New Byte(0) {}
      Bytes1 = CType(.ConvertTo(New Bitmap(Bitmap1), Bytes1.[GetType]()), Byte())
      Dim Bytes2 As Byte() = New Byte(0) {}
      Bytes2 = CType(.ConvertTo(New Bitmap(Bitmap2), Bytes2.[GetType]()), Byte())
 
      ' Hash-Wert der beiden Bitmaps berechnen ... 
      Dim SHA As New System.Security.Cryptography.SHA256Managed
      Dim Hash1 As Byte() = SHA.ComputeHash(Bytes1)
      Dim Hash2 As Byte() = SHA.ComputeHash(Bytes2)
 
      ' ... und miteinander vergleichen
      If Hash1.Length = Hash2.Length Then
        bResult = True
        For i As Integer = 0 To Hash1.Length - 1
          If Hash1(i) <> Hash2(i) Then
            bResult = False
            Exit For
          End If
        Next i
      End If
    End With
  End If
 
  Return bResult
End Function



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.