视频应用程序高手请进!(35分)

  • 主题发起人 主题发起人 szchengyu
  • 开始时间 开始时间
S

szchengyu

Unregistered / Unconfirmed
GUEST, unregistred user!
VFW中有 capSetCallBackOnFrame 中如何取得视频数据,
如果看成 BITMAP,那么这个BITMAP没文件头,怎么处理呢


困惑呀。。。。。。。分少也没办法
 
你先用CapCreateCaptureWindowA()获得视频接口,然后用CapSetCallBackOnFrame()即可取得视频数据。
如:
Dim CAP_PARAMS As CAPTUREPARMS
lwndC = capCreateCaptureWindowA("My Capture Window", WS_CHILD Or WS_VISIBLE, 0, 0, 160, 120, Me.hwnd, 0)
capCaptureGetSetup lwndC, VarPtr(CAP_PARAMS), Len(CAP_PARAMS)
 
[8D]开始前使用 capGetVideoFormat 获得。

http://www.banasoft.com/AVPhone.htm
 
Delphi Example:
http://www.computerworld.com.cn/htm/app/aprog/01_2_5_5.asp
 
YB_unique: 那文章我看过了,我可以得到PVIDEOHDR中的数据,
但恕我愚笨,我仍不知道如何处理DataPoint中的数据,
能否像TBitmap.Scanline一样用指针取里面的数据?

困惑。。。。。分少也没办法.
 
var DataPoint:^byte;

lpVHdr:LongInt
DibLen:integer;
VideoStr:=LPVIDEOHDR(lpVHdr);
DibLen:=VideoStr^.dwBufferLength;

GetMem(DataPoint,64000);
CopyMemory(DataPoint,VideoStr^.lpData,Diblen);

下接你的处理代码
 
实在不好意思,我已经到了这一步,但我不知道拿DataPoint中的数据怎么办?
如何才能像对TBITMAP操作一样,操作里面的数据?
比如我要对这幅图像进行平滑,变形处理
 
你既然CopyMemory了,可以将Memory里的数据用stream读取出来,保存为文件再处理啊!
 
不行,没有文件头,TBITMAP出错
 
所捕获视频流生成的是AVI文件,用TBITMAP处理当然出错!
 
这样呀?! 可我看过它的大小,与相同尺寸的BMP的尺寸小54个字节。

我要实现对图像的处理,应该怎么办呢?
 
先获得AVI文件,然后对你需要的帧处理即可!
 
迷惑。。。。。。。。。。。。。。。。。。
 
你应该获得了AVI文件,对吗?
然后GetAviFrame可以获得AVI的指定帧,处理即可!
迷惑在哪?
 
好,试试,
非常过意不去。。
 
呵呵!没关系!有问题再一起讨论!
其实如果是为了获取视频流,可以用封装好的控件,岂不更方便?
www.torry.net 有很多这种的!
 
GetAviFrame是什么呀?
我不喜欢别人给我源码,但这一次。。。。。。。。。。。。

另:我有个TVideoCap,它的 OnFrameCallback一样要自己处理PVIDEOHDR参数
还有,我的程序里要求对每一帧的处理不得超过60ms,这个控件好像很慢
 
在别的地方得到答案,
还是将分给出吧,
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部