我在做一个传输图象的程序,程序中用GetBitmapBits把位图放到缓存,用SetBitmapBits把数据从缓存放到位图,代码如下,可是两个函数的返回值都是0,请问发生错误的原因在哪啊?在发送程序中:Dim BufferSize As Long, BitmapBuffer() As ByteBufferSize = GetSystemMetrics(SM_CXSCREEN) * GetSystemMetrics(SM_CYSCREEN) * 4
ReDim BitmapBuffer(1 To BufferSize) As ByteGetBitmapBits(hBitmap, BufferSize, BitmapBuffer)在接收程序中:Dim BufferSize As Long, ReceiveBuffer() As ByteBufferSize = GetSystemMetrics(SM_CXSCREEN) * GetSystemMetrics(SM_CYSCREEN) * 4
ReDim ReceiveBuffer(1 To BufferSize) As ByteSetBitmapBits(hBitmap, BufferSize, ReceiveBuffer)两个函数的返回值都是0,不知道是错在哪里了,请高手帮看看吧?
ReDim BitmapBuffer(1 To BufferSize) As ByteGetBitmapBits(hBitmap, BufferSize, BitmapBuffer)在接收程序中:Dim BufferSize As Long, ReceiveBuffer() As ByteBufferSize = GetSystemMetrics(SM_CXSCREEN) * GetSystemMetrics(SM_CYSCREEN) * 4
ReDim ReceiveBuffer(1 To BufferSize) As ByteSetBitmapBits(hBitmap, BufferSize, ReceiveBuffer)两个函数的返回值都是0,不知道是错在哪里了,请高手帮看看吧?
Private Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000
Private Const FORMAT_MESSAGE_IGNORE_INSERTS = &H200Public Function GetLastDllErr(ByVal lErr As Long) As String
Dim sReturn As String
sReturn = String$(256, 32)
FormatMessage FORMAT_MESSAGE_FROM_SYSTEM Or _
FORMAT_MESSAGE_IGNORE_INSERTS, 0&, lErr, _
0&, sReturn, Len(sReturn), ByVal 0
sReturn = Trim(sReturn)
GetLastDllErr = sReturn
End Function
GetBitmapBits返回0,是因为参数传法用错了,
GetBitmapBits不知你是怎么都声明的,若按标准声明
Declare Function GetBitmapBits Lib "gdi32" Alias "GetBitmapBits" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long你的代码应该这样写
r=GetBitmapBits(hBitmap, BufferSize, BitmapBuffer(0))
也就是说最后一个参数要传数组首元素的内存地址SetBitmapBits的问题相同再说复杂点的:
传输图象,理论上是不能用GetBitmapBits的,因为它获取的是DDB位图数据,即设备相关位图,不宜跨设备使用,除非接收方的屏幕分辨率及色深与发送方完全一致,而这在异地传输中是不太容易保证的。这种用途下GetDIBits要更合适。你面对问题还很多。