我写了一段局域网动态监控屏幕的代码,用GetBitmapBits将图像放入Byte()后,发送到另一台,为什么另一台接受后用SetBitmapBits重绘后,图像像素总是错位??(两台分辨率为800*600  1024*768,但程序中有相应程序处理,不知是不是错在那里?)'被监视:
'===============================
Dim Colours() As Byte
Private Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
Dim PRO As String
Dim HowManyBytes As Long
Private Sub Form_Click()
End
End Sub
Private Sub Form_Load()
WK1.LocalPort = 61161
WK1.Listen
End Sub
Private Sub WK1_ConnectionRequest(ByVal requestID As Long)
If WK1.State <> sckClosed Then WK1.Close
WK1.Accept requestID
PRO = "1"
WK1.SendData "NEXT"
End Sub
Private Sub WK1_DataArrival(ByVal bytesTotal As Long)
Dim sData As String
Select Case PRO
Case "1"
Dim TEMa() As String
WK1.GetData sData
TEMa = Split(sData, "|")
Me.Left = 0
Me.Top = 0
Me.Width = (TEMa(0))
Me.Height = Val(TEMa(1))
Me.ScaleWidth = Me.Width
Me.ScaleHeight = Me.Height
HowManyBytes = Val(TEMa(2))
ReDim Colours(1 To HowManyBytes) As Byte
PRO = "2"
WK1.SendData "NEXT"
Case "2"
If bytesTotal = HowManyBytes Then
WK1.GetData Colours
SetBitmapBits Me.Image, UBound(Colours), Colours(0)
Me.Refresh
PRO = "1"
WK1.SendData "next"
End If
End Select
End Sub
'============================End===============================
监视端:
===========================
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nScaleWidth As Long, ByVal nScaleHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
Dim DESKTOP_DC As Long
Dim PRO As String
Dim COLOURs() As Byte
Dim HowManyBytes As LongPrivate Sub Form_Click()
PRO = "1"
WK1.Connect "192.168.0.2", 61161
End SubPrivate Sub Form_Load()
Me.Show
Me.Move 0, 0, Screen.Width, Screen.Height
Me.Move 0, 0, Me.Width, Me.Height
Me.ScaleWidth = Me.Width
Me.ScaleHeight = Me.Height
DESKTOP_DC = GetDC(0)
End Sub
Private Sub WK1_DataArrival(ByVal bytesTotal As Long)
Select Case PRO
Case "1"
HowManyBytes = (Me.ScaleWidth / 15) * (Me.ScaleHeight / 15) * 3
ReDim COLOURs(1 To HowManyBytes) As Byte
WK1.SendData Format(Me.Width, "0000000") & "|" & Format(Me.Height, "0000000") & "|" & Format(HowManyBytes, "00000000000")
PRO = "2"
Case "2"
BitBlt Me.hDC, 0, 0, Me.ScaleWidth / 15, Me.ScaleHeight / 15, DESKTOP_DC, 0, 0, vbSrcCopy
Me.Refresh
GetBitmapBits Me.Image, UBound(COLOURs), COLOURs(1)
WK1.SendData COLOURs
TTT = timeGetTime + 20
Do While timeGetTime > TTT
DoEvents
Loop
PRO = "1"
End Select
End Sub