下面是我写的打开并浏览摄像头图像的代码,写到OpenVideo按钮事件中:
//使用Tpanel控件来创建捕获窗口
ghCapWnd := CapCreateCaptureWindow('',//PChar('KruwoSoft'), //捕获窗口的名字
WS_CHILD or WS_VISIBLE,//窗口样式
0, //X坐标
0, //Y坐标
gCapVideoArea.Width, //窗口宽
gCapVideoArea.Height, //窗口高
gCapVideoArea.Handle, //窗口句柄
0); //一般为0
//将一个捕获窗口与一个设备驱程相关联,第二个参数是个序号,当系统中装有多个显视驱动程序时,其值分别依次为0到总个数
CapDriverConnect(ghCapWnd, 0);
//设置预览时的比例
CapPreviewScale(ghCapWnd, True);
//设置预览时的帧频率
CapPreviewRate(ghCapWnd,60);
//指定是否使用叠加模式,使用为1,否则为0
//CapOverlay(ghCapWnd, True);
//如果要捕获视频流,则要使用函数指定不生成文件。否则将会自动生成AVI文件
CapCaptureSequenceNoFile(ghCapWnd);
//打开预览
CapPreview(ghCapWnd, True);现在遇到这样的问题:
当我点击OpenVideo按钮的时候,Panel开始显示黑色,但是什么也看不到。而当我在点击窗体其他地方,或移动窗体,或打开其他程序的时候,Panel才给我显示图像。我试了N次了,都是这样,搞不明白为什么?特来请教各位大虾。另外,如果我想保存一张图片,如何操作?
我使用过其它的类似的软件,我这个30万像素的摄像头只能保存320*240大小的图片,能不能保存的再大些?看了一些文章,好像只能这么大了,是吗?从来没接触过视频开发问题,请大家多帮忙,先谢谢了!
//使用Tpanel控件来创建捕获窗口
ghCapWnd := CapCreateCaptureWindow('',//PChar('KruwoSoft'), //捕获窗口的名字
WS_CHILD or WS_VISIBLE,//窗口样式
0, //X坐标
0, //Y坐标
gCapVideoArea.Width, //窗口宽
gCapVideoArea.Height, //窗口高
gCapVideoArea.Handle, //窗口句柄
0); //一般为0
//将一个捕获窗口与一个设备驱程相关联,第二个参数是个序号,当系统中装有多个显视驱动程序时,其值分别依次为0到总个数
CapDriverConnect(ghCapWnd, 0);
//设置预览时的比例
CapPreviewScale(ghCapWnd, True);
//设置预览时的帧频率
CapPreviewRate(ghCapWnd,60);
//指定是否使用叠加模式,使用为1,否则为0
//CapOverlay(ghCapWnd, True);
//如果要捕获视频流,则要使用函数指定不生成文件。否则将会自动生成AVI文件
CapCaptureSequenceNoFile(ghCapWnd);
//打开预览
CapPreview(ghCapWnd, True);现在遇到这样的问题:
当我点击OpenVideo按钮的时候,Panel开始显示黑色,但是什么也看不到。而当我在点击窗体其他地方,或移动窗体,或打开其他程序的时候,Panel才给我显示图像。我试了N次了,都是这样,搞不明白为什么?特来请教各位大虾。另外,如果我想保存一张图片,如何操作?
我使用过其它的类似的软件,我这个30万像素的摄像头只能保存320*240大小的图片,能不能保存的再大些?看了一些文章,好像只能这么大了,是吗?从来没接触过视频开发问题,请大家多帮忙,先谢谢了!
解决方案 »
- cxgrid创建列的的问题
- ado+mssql2000 怎么对两个以上字段作模糊过滤?
- 动态创造代码能否写在DLL中
- Method 'SaveAs' not supported by automation object
- 急:用Delphi7开发的DOS命令行程序为什么连接数据库出错?
- 拖动一个button水平移动时,好像默认有一个最小值,我这里试验为8个像素,如何只平移一个像素?
- 动态生成控件问题
- 各位大侠 ,现在困扰小弟一个棘手问题 !高分!高分!高分!高分!高分!
- 做了BMP to GIF的共享软件会不会引起GIF格式的版权纠纷?
- ***** 20 分***** 怎么样设置STRINGGRID的某几列为不可见?
- 如何在程序与sql server数据库连接由于异常情况断开的时候去自动重新连接数据库??
- 什么方法才使程序最佳?
自帯DEMO、有捕捉摄像头TSampleGrabber等控件
而且一般来说预览和捕获是不能同时执行的,如果你只想预览可以只调用CapPreview(ghCapWnd, True);如果你想边捕获边预览(就像一些视频聊天软件一样),你只能调用CapCaptureSequenceNoFile(ghCapWnd);然后在回调函数里面一方面显示在本地(自己写代码画出来)另一方面通过网络发送出去或者保存成文件。给你个完整的解决方案吧:)var
ghCapWnd: HWND;const
BMPInfo: TBitmapInfo = (
bmiHeader:(
biSize : sizeof(BITMAPINFOHEADER);
biWidth : 176;
biHeight : 144;
biPlanes : 1;
biBitCount : 24;
biSizeImage : 76032));function fpProc(hWnd: HWND; lpVHdr: PVIDEOHDR): DWORD; stdcall;
var
buf: pointer;
begin
Form1.Image1.Canvas.Lock;
try
Form1.Image1.Picture.Bitmap.Handle := CreateDIBSection(0, BMPInfo, DIB_RGB_COLORS, buf, 0, 0);
if buf <> nil then
Move(lpVHdr.lpData^, buf^, BMPInfo.bmiHeader.biSizeImage);
finally
Form1.Image1.Canvas.Unlock;
end;
Result:=1;
end;procedure TForm1.Button4Click(Sender: TObject);
var
capparms: TCAPTUREPARMS;
begin
ghCapWnd := CapCreateCaptureWindow(nil,//PChar('KruwoSoft'), //捕获窗口的名字
0,//窗口样式
0, //X坐标
0, //Y坐标
0, //窗口宽
0, //窗口高
Handle, //窗口句柄
0);
capCaptureGetSetup(ghCapWnd, @CapParms, sizeof(TCAPTUREPARMS)); CapParms.vKeyAbort := 0;
CapParms.fAbortLeftMouse := FALSE;
CapParms.fAbortRightMouse := FALSE;
CapParms.fYield := TRUE;
CapParms.fCaptureAudio := FALSE;
CapParms.wPercentDropForError := 100;
CapParms.dwRequestMicroSecPerFrame:= 100000;
capCaptureSetSetup(ghCapWnd, @CapParms, sizeof(TCAPTUREPARMS));
CapDriverConnect(ghCapWnd, 1);
capSetVideoFormat(ghCapWnd, @BMPInfo, sizeof(BMPInfo)); //设置视频格式,bmp图片的大小也由它决定
capSetCallbackOnVideoStream(ghCapWnd, fpProc);
CapCaptureSequenceNoFile(ghCapWnd);
end;画到image里面去了,怎么保存成文件不用我说了吧:)