最近在看一个网上的例子,利用vfw对视频头进行捕获,并利用回调函数把每帧的数据都放进了一个数组里面,我想利用drawdibdraw()这个函数把数据再显示到一个picture里面,但是不成功,还请大家帮忙啊!谢谢.
回调函数如下:
Function MyFrameCallback(ByVal lwnd As Long, ByVal lpVHdr As Long) As Long
Dim VideoHeader As VIDEOHDR
Dim VideoData() As Byte
Dim hDrawDib As Long
Dim hBitMap As BITMAPINFOHEADER
Dim lr As Long
hDrawDib = DrawDibOpen()
'//Fill VideoHeader with data at lpVHdr
RtlMoveMemory VarPtr(VideoHeader), lpVHdr, Len(VideoHeader)
'// Make room for data
ReDim VideoData(VideoHeader.dwBytesUsed)
'//Copy data into the array
RtlMoveMemory VarPtr(VideoData(0)), VideoHeader.lpData, VideoHeader.dwBytesUsed
lr = DrawDibDraw(hDrawDib,Picture1.hdc, 0, 0, Picture1.Width, Picture1.Height, hBitMap, VideoHeader.lpData, 0, 0, hBitMap.biWidth, hBitMap.biSize, 0)
'就这句,我参照网上一个Delphi程序写的,我不知道到底传进去的 hBitMap和VideoHeader.lpData 这两个参数有用没有,这里本来该取一个hBitMap的指针,但是我不知道该怎么取一个自定义类型的地址.....但是程序运行又不报错,不过lr 返回为0. Debug.Print lr
DrawDibClose (hDrawDib)
End Function
请高手帮帮忙啊~~~~谢谢!!!!
回调函数如下:
Function MyFrameCallback(ByVal lwnd As Long, ByVal lpVHdr As Long) As Long
Dim VideoHeader As VIDEOHDR
Dim VideoData() As Byte
Dim hDrawDib As Long
Dim hBitMap As BITMAPINFOHEADER
Dim lr As Long
hDrawDib = DrawDibOpen()
'//Fill VideoHeader with data at lpVHdr
RtlMoveMemory VarPtr(VideoHeader), lpVHdr, Len(VideoHeader)
'// Make room for data
ReDim VideoData(VideoHeader.dwBytesUsed)
'//Copy data into the array
RtlMoveMemory VarPtr(VideoData(0)), VideoHeader.lpData, VideoHeader.dwBytesUsed
lr = DrawDibDraw(hDrawDib,Picture1.hdc, 0, 0, Picture1.Width, Picture1.Height, hBitMap, VideoHeader.lpData, 0, 0, hBitMap.biWidth, hBitMap.biSize, 0)
'就这句,我参照网上一个Delphi程序写的,我不知道到底传进去的 hBitMap和VideoHeader.lpData 这两个参数有用没有,这里本来该取一个hBitMap的指针,但是我不知道该怎么取一个自定义类型的地址.....但是程序运行又不报错,不过lr 返回为0. Debug.Print lr
DrawDibClose (hDrawDib)
End Function
请高手帮帮忙啊~~~~谢谢!!!!
解决方案 »
- 为何将组合框放在框架中,就不能用api的方法拉长的呢?
- 如何隐藏输入法状态条,就是打开输入法后不出现输入法状态条
- 如何判断打印机状态!
- 在线等候答复~~谢谢了
- 在vb中怎样连接mysql数据库(新手)求救!
- 请各位朋友耐心看一下代码,其功能是实现图片保存到数据库中!
- 如何在VB程序中,打开某个指定打印机的属性窗口?
- 在VB中,怎样与DBase(后缀.dbf)数据库连接!
- 发了一天居然没人知道。怎样再FRAME控件内部显示图片?
- 请问怎样一直显示图象?
- 项目中用的表格控件全是msflexgrid,可是现在客户要求表格都要支持滚轮,我不知如何办了。客户至上呀!
- 关于“As New Form”的问题
Type VIDEOHDR
lpData As Long '// address of video buffer
dwBufferLength As Long '// size, in bytes, of the Data buffer
dwBytesUsed As Long '// see below
dwTimeCaptured As Long '// see below
dwUser As Long '// user-specific data
dwFlags As Long '// see below
dwReserved(3) As Long '// reserved; do not use}
End Type'Dim hBitMap As BITMAPINFOHEADER的定义:Type BITMAPINFOHEADER
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type'DrawDibDraw的定义:
Private Declare Function DrawDibDraw Lib "msvfw32" ( _
ByVaL hdd As Long, _
ByVaL hdc As Long, _
ByVaL xDst As Long, _
ByVaL yDst As Long, _
ByVaL dxDst As Long, _
ByVaL dyDst As Long, _
ByRef lpbi As BITMAPINFOHEADER, _ '我现在把这里改成 any 了,但是一样.
lpBits As Any, _
ByVaL xSrc As Long, _
ByVaL ySrc As Long, _
ByVaL dxSrc As Long, _
ByVaL dySrc As Long, _
ByVaL wFlags As Long) As Long
Debug.Print VideoData
这个语句都是可以看到数据是复制到了VideoData里面的.
我试了还是不行,返回0.
lr = DrawDibDraw(hDrawDib,Picture1.hdc, 0, 0, -1, -1, hBitMap,ByVal VideoHeader.lpData, 0, 0, hBitMap.biWidth, hBitMap.biHeight, 0)
这句我有个疑问,我们只是在前面声明了Dim hBitMap As BITMAPINFOHEADER 但是 hBitMap只是个结构和我们的数据好象都没有关系呀,能起作用吗?