El ejemplo de este artículo describe el dispositivo de trampa del "QQ Beauty Find Difference Game" implementado en VB. Compártelo con todos para tu referencia. Los detalles son los siguientes:
Es bastante aburrido. El principio es muy simple. Usar VB es más lento, pero la implementación es fácil.
Opción ExplicitPrivate Tipo sPOINT x As Long y As LongEnd TypePrivate Declare Función GetDC Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Función GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As LongPrivate declara la función SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As LongPrivate Const HWND_TOPMOST& = -1' Coloque la ventana en la parte superior de la lista y encima de cualquier Frente de la ventana superior Private Const SWP_NOSIZE& = &H1' Mantener el tamaño de la ventana Private Const SWP_NOMOVE& = &H2' Mantiene la posición de la ventana Private Sub Form_Load()SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE' Establece la ventana para que esté siempre en la parte superior End Sub' Descompone el valor RGB largo en 3 componentes Sub ColorRGB(Color siempre, C() Como entero) Const ByN Como entero = 256 Const ByN2 Mientras = 65536 C(1) = (Color Mod ByN) C(2) = ((Color Mod ByN2) / ByN) C(3) = (Color / ByN2)End SubPrivate Sub GetPoint() Dim p1( 497, 447) Mientras, p2(497, 447) Mientras, C1(3) Como entero, C2(3) As Integer 'El tamaño de la matriz coincide con el tamaño de la imagen Dim pic1 As sPOINT, pic2 As sPOINT 'Establece la posición en pantalla de las dos imágenes pic1.x = 8 pic1.y = 192 pic2.x = 517 pic2.y = 192 Dim h Mientras, hD Mientras, r Mientras, i Como entero, j Como entero hD = GetDC(0) 'Leer dos imágenes para i = 0 Para 497 Para j = 0 A 447 p1(i, j) = GetPixel(hD, i + pic1.x, j + pic1.y) p2(i, j) = GetPixel(hD, i + pic2.x, j + pic2 .y) Next Next 'Contraste, marca la diferencia Dim t As Boolean t = True Para i = 0 a 497 Para j = 0 a 447 Llamar ColorRGB(p1(i, j), C1()) Llamar a ColorRGB(p2(i, j), C2()) Si (Abs(C1(1) - C2(1)) > 30 o Abs(C1(2) - C2(2)) > 30 O Abs(C1(3) - C2(3)) > 30) Entonces t = No t Si t Entonces Imagen1.ForeColor = &H0& Else Picture1.ForeColor = &HFF00& End If Else Picture1.ForeColor = p1(i, j) End If Picture1.PSet (i, j) Next NextEnd SubPrivate Sub Picture1_Click()Me.Visible = FalseDoEventsGetPointMe.Visible = TrueEnd Sub
Espero que este artículo sea útil para la programación VB de todos.