VFW使用疑问 大家给小弟解答一下疑问哈,使用vfw采集摄像头的视频,数据格式是什么?怎么播放每一次采集的数据帧?感激! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以去看微软的demo,这个用google一收一大堆,不过我一般用Dx来做,DX也有完整的Demo. 给你个教程看看http://blog.csdn.net/xilyu/archive/2008/02/17/2100636.aspx function framecallback(hwnd: hwnd; lpvhdr: pvideohdr): longint;stdcall;var hd:thandle;jpg:tjpegimage;memstream :tmemorystream;bitmap:tbitmap;begin //½«Êý¾ÝÏÔÔÚimage£¬bitmap:=tbitmap.create;bitmap.width :=bmpinfo.bmiheader.biwidth; // new size of bitmapbitmap.height:=bmpinfo.bmiheader.biheight;hd:= drawdibopen;//drawdibdraw(hd,bitmap.canvas.handle,0,0,bmpinfo.bmiheader.biwidth div 2 ,bmpinfo.bmiheader.biheight div 2,@bmpinfo.bmiheader,lpvhdr^.lpdata,0,0,bmpinfo.bmiheader.biwidth div 2,bmpinfo.bmiheader.biheight div 2,0);drawdibdraw(hd,capwnd2,0,0,bmpinfo.bmiheader.biwidth,bmpinfo.bmiheader.biheight,@bmpinfo.bmiheader,lpvhdr^.lpdata,0,0,bmpinfo.bmiheader.biwidth,bmpinfo.bmiheader.biheight,0);drawdibclose(hd);//deletedc(capwnd2);//releasedc(capwnd2,capwnd22);//·¢ËÍÊý¾Ý{memstream := tmemorystream.create;jpg := tjpegimage.create; jpg.assign(bitmap);jpg.compressionquality := 10; //jpgѹËõÖÊÁ¿jpg.jpegneeded;jpg.compress;jpg.savetostream(memstream);jpg.free;//ÒòΪudpÊý¾Ý°üÓдóСÏÞÖÆ£¬ÕâÀïÈç¹û³¬³ö²¿·Ö£¬¾ÍûÓд«Ê䣬ÍêÈ«¿ÉÒÔ·¢¼¸´Î·¢³öÈ¥form1.idudpclient1.broadcastenabled:=true;//Óù㲥¹¦ÄÜif memstream.size>form1.idudpclient1.buffersize then//Ïò192.168.0.xÍø¶Î¹ã²¥£¬¶Ë¿Ú 9001form1.idudpclient1.sendbuffer('192.168.0.255',9001,memstream.memory^,form1.idudpclient1.buffersize)elseform1.idudpclient1.sendbuffer('192.168.0.255',9001,memstream.memory^,memstream.size);memstream.free; }bitmap.free;end;procedure TForm1.Button1Click(Sender: TObject);begincapwnd := capcreatecapturewindow('ÎҵĴ°', ws_visible or ws_child,//´°¿ÚÑùʽ0, //x×ø±ê0, //y×ø±êpanel1.width, //´°¿Ú¿ípanel1.height, //´°¿Ú¸ßpanel1.handle, //´°¿Ú¾ä±ú0); //ͨ³£Îª0if capwnd = 0 then exit; //¶¨ÒåÖ¡²¶×½»Øµ÷º¯Êýcapsetcallbackonframe(capwnd,@framecallback);capparms.dwrequestmicrosecperframe:=1;capparms.flimitenabled:=false;capparms.fcaptureaudio:=false;capparms.fmcicontrol:=false;capparms.fyield:=true;capparms.vkeyabort:=vk_escape;capparms.fabortleftmouse:=false;capparms.fabortrightmouse:=false; //ÈÃÉèÖÃÉúЧcapcapturesetsetup(capwnd,@capparms,sizeof(tcaptureparms));cappreviewrate(capwnd,33); //ÉèÖÃÔ¤ÀÀÊÓƵµÄƵÂÊcapcapturesequencenofile(capwnd); //Èç¹ûÒª²¶×½ÊÓƵÁ÷£¬ÔòҪʹÓú¯ÊýÀ´Ö¸¶¨²»Éú³ÉÎļþ£¬²»È»»á×Ô¶¯Éú³ÉaviÎļþcapdriverconnect(capwnd,0); //Á¬½ÓÉãÏñÍ·É豸£¬µÚ¶þ¸ö²ÎÊýÊǸöÐòºÅ£¬µ±ÏµÍ³ÖÐ×°Óжà¸öÏÔʾÇý¶¯³ÌÐòʱ£¬ÆäÖµ·Ö±ðÒÀ´ÎΪ0µ½×ܸöÊýÈç¹ûÓжà¸öÉãÏñÍ·£¬ÄÇô¾ÍÊÇ0->1->2capgetvideoformat(capwnd, @bmpinfo,sizeof(tbitmapinfo)); //È¡µÃÊÓƵͼÏñÊý¾ÝÍ·cappreviewscale(capwnd,true); //ÊÇ·ñËõ·Åcapoverlay(capwnd,true); //Ö¸¶¨ÊÇ·ñʹÓõþ¼Óģʽ£¬trueΪʹÓ㬷ñÔòΪfalsecappreview(capwnd,true);end;procedure TForm1.Button2Click(Sender: TObject);begincapcaptureabort(capwnd); //Í£Ö¹²¶×½capdriverdisconnect(capwnd); //½«²¶×½´°Í¬Çý¶¯Æ÷¶Ï¿ªend;procedure TForm1.Button3Click(Sender: TObject);begincapwnd2:=getdc(panel2.Handle;)end;自己看,能显示,有点问题,基本思路是这 关于TerminateProcess函数 VC新手 求助好心人对话框的基本步骤 初学VC,大家帮忙推荐本好书啊 一个关于GetBitmapBits()的问题?很急!多谢高手指点! TCP文件传输 CPU占用率较大30% 技术小问题,请大家帮忙,谢谢 工具栏提示(Tooltip)不见了. 如何在vc中获取鼠标的位置啊? 紧急求援:VC1.0下载网址!!1 询问tab ctrl问题 vs2008sp1的风格变化【200分】 vc6.0不能关联MSDN(vs2008下带的)
http://blog.csdn.net/xilyu/archive/2008/02/17/2100636.aspx
function framecallback(hwnd: hwnd; lpvhdr: pvideohdr): longint;stdcall;
var hd:thandle;
jpg:tjpegimage;
memstream :tmemorystream;
bitmap:tbitmap;
begin //½«Êý¾ÝÏÔÔÚimage£¬
bitmap:=tbitmap.create;
bitmap.width :=bmpinfo.bmiheader.biwidth;
// new size of bitmap
bitmap.height:=bmpinfo.bmiheader.biheight;
hd:= drawdibopen;
//drawdibdraw(hd,bitmap.canvas.handle,0,0,bmpinfo.bmiheader.biwidth div 2 ,bmpinfo.bmiheader.biheight div 2,@bmpinfo.bmiheader,lpvhdr^.lpdata,0,0,bmpinfo.bmiheader.biwidth div 2,bmpinfo.bmiheader.biheight div 2,0);
drawdibdraw(hd,capwnd2,0,0,bmpinfo.bmiheader.biwidth,bmpinfo.bmiheader.biheight,@bmpinfo.bmiheader,lpvhdr^.lpdata,0,0,bmpinfo.bmiheader.biwidth,bmpinfo.bmiheader.biheight,0);
drawdibclose(hd);
//deletedc(capwnd2);
//releasedc(capwnd2,capwnd22);
//·¢ËÍÊý¾Ý
{memstream := tmemorystream.create;
jpg := tjpegimage.create; jpg.assign(bitmap);
jpg.compressionquality := 10;
//jpgѹËõÖÊÁ¿
jpg.jpegneeded;
jpg.compress;
jpg.savetostream(memstream);
jpg.free;
//ÒòΪudpÊý¾Ý°üÓдóСÏÞÖÆ£¬ÕâÀïÈç¹û³¬³ö²¿·Ö£¬¾ÍûÓд«Ê䣬ÍêÈ«¿ÉÒÔ·¢¼¸´Î·¢³öÈ¥
form1.idudpclient1.broadcastenabled:=true;//Óù㲥¹¦ÄÜ
if memstream.size>form1.idudpclient1.buffersize then
//Ïò192.168.0.xÍø¶Î¹ã²¥£¬¶Ë¿Ú 9001
form1.idudpclient1.sendbuffer('192.168.0.255',9001,memstream.memory^,form1.idudpclient1.buffersize)
else
form1.idudpclient1.sendbuffer('192.168.0.255',9001,memstream.memory^,memstream.size);
memstream.free; }
bitmap.free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
capwnd := capcreatecapturewindow('ÎҵĴ°', ws_visible or ws_child,//´°¿ÚÑùʽ
0, //x×ø±ê
0, //y×ø±ê
panel1.width, //´°¿Ú¿í
panel1.height, //´°¿Ú¸ß
panel1.handle, //´°¿Ú¾ä±ú
0); //ͨ³£Îª0
if capwnd = 0 then exit; //¶¨ÒåÖ¡²¶×½»Øµ÷º¯Êý
capsetcallbackonframe(capwnd,@framecallback);
capparms.dwrequestmicrosecperframe:=1;
capparms.flimitenabled:=false;
capparms.fcaptureaudio:=false;
capparms.fmcicontrol:=false;
capparms.fyield:=true;
capparms.vkeyabort:=vk_escape;
capparms.fabortleftmouse:=false;
capparms.fabortrightmouse:=false; //ÈÃÉèÖÃÉúЧ
capcapturesetsetup(capwnd,@capparms,sizeof(tcaptureparms));
cappreviewrate(capwnd,33); //ÉèÖÃÔ¤ÀÀÊÓƵµÄƵÂÊ
capcapturesequencenofile(capwnd); //Èç¹ûÒª²¶×½ÊÓƵÁ÷£¬ÔòҪʹÓú¯ÊýÀ´Ö¸¶¨²»Éú³ÉÎļþ£¬²»È»»á×Ô¶¯Éú³ÉaviÎļþ
capdriverconnect(capwnd,0); //Á¬½ÓÉãÏñÍ·É豸£¬µÚ¶þ¸ö²ÎÊýÊǸöÐòºÅ£¬µ±ÏµÍ³ÖÐ×°Óжà¸öÏÔʾÇý¶¯³ÌÐòʱ£¬ÆäÖµ·Ö±ðÒÀ´ÎΪ0µ½×ܸöÊýÈç¹ûÓжà¸öÉãÏñÍ·£¬ÄÇô¾ÍÊÇ0->1->2
capgetvideoformat(capwnd, @bmpinfo,sizeof(tbitmapinfo)); //È¡µÃÊÓƵͼÏñÊý¾ÝÍ·
cappreviewscale(capwnd,true); //ÊÇ·ñËõ·Å
capoverlay(capwnd,true); //Ö¸¶¨ÊÇ·ñʹÓõþ¼Óģʽ£¬trueΪʹÓ㬷ñÔòΪfalse
cappreview(capwnd,true);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
capcaptureabort(capwnd); //Í£Ö¹²¶×½
capdriverdisconnect(capwnd); //½«²¶×½´°Í¬Çý¶¯Æ÷¶Ï¿ª
end;procedure TForm1.Button3Click(Sender: TObject);
begin
capwnd2:=getdc(panel2.Handle;)
end;
自己看,能显示,有点问题,基本思路是这