Voici ce que je suis exactement, mais il échoue après un passage. Quelque chose sur le tableau hors limites probablement quelque chose avec le y * bmd.Stride (mais je ne comprends pas pourquoi une erreur hors limites se produit comme il devrait juste copier la mémoire brute octets pas de tableaux sont utilisés!)
Public Function findImages(ByVal bmd As BitmapData) As List(Of Point)
Dim results As New List(Of Point)()
foundRects = New List(Of Rectangle)()
For y As Integer = 0 To bmd.Height - 1
'oringinal code
'Dim scanline As Pointer(Of Byte) = CType(bmd.Scan0, Pointer(Of Byte)) + (y * bmd.Stride)
'mess is here
' gets address of the first line
'Dim ptr As IntPtr = bmd.Scan0
'Dim bytes As Integer = (y * bmd.Stride)
'If bytes = 0 Then bytes = bmd.Stride
Dim scanline(bmd.Width * PIXLESIZE) As Byte
'Copy the RGB values into the array.
Runtime.InteropServices.Marshal.Copy(bmd.Scan0, scanline, (y * bmd.Stride), bmd.Width * PIXLESIZE)
' --------------------------------
For x As Integer = 0 To bmd.Width - 1
Dim xo As Integer = x * PIXLESIZE
Dim buff As Byte() = {scanline(xo), scanline(xo + 1), scanline(xo + 2), &HFF}
Dim val As Integer = BitConverter.ToInt32(buff, 0)
' Pixle value from subimage in desktop image
If pixels.ContainsKey(val) AndAlso notFound(x, y) Then
Dim loc As Point = DirectCast(pixels(val), Point)
Dim sx As Integer = x - loc.X
Dim sy As Integer = y - loc.Y
' Subimage occurs in desktop image
If imageThere(bmd, sx, sy) Then
Dim p As New Point(x - loc.X, y - loc.Y)
results.Add(p)
foundRects.Add(New Rectangle(x, y, bmImage.Width, bmImage.Height))
End If
End If
Next
Next
Return results
End Function
Comment résoudre exactement mon problème? J'ai obtenu cet atm Dim scanline (bmd.Width * PIXLESIZE) Comme Byte Runtime.InteropServices.Marshal.Copy (bmd.Scan0, scanline, (y * bmd.Stride), bmd.Width * PIXLESIZE) mais il échoue après un passer. – SSpoke