<DllImport("cdll.DLL", EntryPoint:="PicCompare", _
CharSet:=CharSet.Auto, ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function _
PicCompare(ByVal SrcHbitmap As IntPtr, _
ByVal DstHbitmap As IntPtr) As Integer
End Function
Private Sub cmdFindASM_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFindASM.Click
Dim Dst As New Bitmap(pBoxDst.Image)
Dim Src As New Bitmap(pBoxSrc.Image)
Dim ret As Integer
ret = PicCompare(Src.GetHbitmap, Dst.GetHbitmap)
If ret = 0 Then
MsgBox("Ok")
Else
MsgBox("Failed")
End If
End Sub
Dim Dst As New Bitmap(pBoxDst.Image)
Dim Src As New Bitmap(pBoxSrc.Image)
Dim bmDst As New System.Drawing.Imaging.BitmapData
Dim bmSrc As New System.Drawing.Imaging.BitmapData
Dim i As Integer
Dim tmp As Integer
bmSrc = Src.LockBits(New Rectangle(0, 0, Src.Width - 1, Src.Height - 1), Imaging.ImageLockMode.ReadOnly, Src.PixelFormat)
bmDst = Dst.LockBits(New Rectangle(0, 0, Dst.Width - 1, Dst.Height - 1), Imaging.ImageLockMode.ReadOnly, Dst.PixelFormat)
'если картинки отличаются по размеру значит они разные
If bmSrc.Width <> bmDst.Width Or bmSrc.Height <> bmDst.Height Then
MsgBox("Failed")
Src.UnlockBits(bmSrc)
Dst.UnlockBits(bmDst)
Exit Sub
End If
'если у картинок разная "битность" значит они разные
If Src.GetPixelFormatSize(bmSrc.PixelFormat) <> Dst.GetPixelFormatSize(bmDst.PixelFormat) Then
MsgBox("Failed")
Src.UnlockBits(bmSrc)
Dst.UnlockBits(bmDst)
Exit Sub
End If
'длинна массива данных картинки в байтах
tmp = bmDst.Width * bmDst.Height * Dst.GetPixelFormatSize(bmDst.PixelFormat) / 8
'сравниваем
For i = 0 To tmp - 1
'как только найдем различие - завершаем
If Not Marshal.ReadByte(bmDst.Scan0, i) = Marshal.ReadByte(bmSrc.Scan0, i) Then
MsgBox("Failed")
Src.UnlockBits(bmSrc)
Dst.UnlockBits(bmDst)
Exit Sub
End If
Next
'различий не обнаружено. вывод: картинки одинаковые
MsgBox("Ok")
Src.UnlockBits(bmSrc)
Dst.UnlockBits(bmDst)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 66