视频捕捉卡的控制?

BaoYu 2002-10-23 12:00:52
各位大侠,我遇到一个问题,以前用AUDW95DLL可以处理98下视频捕捉卡。看样子,是公开的一个标准。可在WIN2000下不能用。我该用什么DLL及什么函数。哪们有经验能不能介绍一下。我用工具看其它的程序是用WINMM.DLL做的。可是如果使用呢,还是不懂。请各位帮忙。如果分不够,可以再加。
...全文
85 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingfire 2002-11-04
  • 打赏
  • 举报
回复
dycdyc123(重出江湖):你的代码是某个专用的capture card SDK吧!
dycdyc123 2002-10-25
  • 打赏
  • 举报
回复
呵呵
我给一段代码:
// G200.h: interface for the CG200 class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_G200_H__6E273521_68DE_11D6_8654_D89BD9180E70__INCLUDED_)
#define AFX_G200_H__6E273521_68DE_11D6_8654_D89BD9180E70__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "cg200-32.h"
struct CARDPARA
{
int nADBri;
int nADCon;
int nADHue;
int nADSat;
int bColorSpace;
};
class TCG200
{
public:
TCG200();
~TCG200();
public:
HCG200 hcg200;
// int nSource; //0,1,2,3,4,5,6;
public:
void SetColorSpace(BYTE bSpace);
CRect m_rcInput;
CRect m_rcDisp;
int Snap();
int SetSource(int nSource);
int SetParam(CARDPARA * pCardPara);
int SetDispWindow(int left,int top,int width,int height);
int SetDispWindow(CRect * pRect);
int SetInpVideoWindow(int left,int top,int width,int height);
int SetInpVideoWindow(CRect * pRect);
int Capture(BOOL bEnable=TRUE);
void InitCard(int iImageDevice);
};
#endif

// G200.cpp: implementation of the CG200 class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ECS.h"
#include "G200.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

TCG200::TCG200():m_rcDisp(0,0,0,0),m_rcInput(0,0,0,0)
{
hcg200=0;
}

TCG200::~TCG200()
{
EndCG200(hcg200);
}

void TCG200::InitCard(int iImageDevice)
{
hcg200=BeginCG200(iImageDevice);
if(hcg200==0)
{
MessageBox(NULL,"图像采集卡初始化失败!","系统提示",MB_OK);
return;
}
CG200SetDispMode(hcg200,FRAME);
CG200SetDelay(hcg200,146,48);
CG200SetColorSpace(hcg200,RGB565);
}

int TCG200::Capture(BOOL bEnable /*=TRUE*/)
{
return CG200Capture(hcg200,bEnable);
}

int TCG200::SetInpVideoWindow(CRect * pRect)
{
m_rcInput=*pRect;
return CG200SetInpVideoWindow(hcg200,pRect->left,pRect->top,
pRect->Width(),pRect->Height());
}

int TCG200::SetInpVideoWindow(int left, int top, int width, int height)
{
m_rcInput.left=left;
m_rcInput.top=top;
m_rcInput.right=left+width;
m_rcInput.bottom=top+height;
return CG200SetInpVideoWindow(hcg200,left,top,width,height);
}

int TCG200::SetDispWindow(CRect *pRect)
{
m_rcDisp=*pRect;
return CG200SetDispWindow(hcg200,pRect->left,pRect->top,
pRect->Width(),pRect->Height());
}

int TCG200::SetDispWindow(int left, int top, int width, int height)
{
m_rcDisp.left=left;
m_rcDisp.top=top;
m_rcDisp.right=left+width;
m_rcDisp.bottom=top+height;
return CG200SetDispWindow(hcg200,left,top,width,height);
}

int TCG200::SetParam(CARDPARA *pCardPara)
{
int result;
result=CG200SetADParam(hcg200,AD_BRIGHTNESS,pCardPara->nADBri);
if(result==0)
return 0;
result=CG200SetADParam(hcg200,AD_CONTRAST,pCardPara->nADCon);
if(result==0)
return 0;
result=CG200SetADParam(hcg200,AD_HUE,pCardPara->nADHue);
if(result==0)
return 0;
result=CG200SetADParam(hcg200,AD_SATURATION,pCardPara->nADSat);
return result;
}

int TCG200::SetSource(int nSource)
{
VERIFY(nSource>=0&&nSource<6);
return CG200SetADParam(hcg200,AD_SOURCE,nSource);
}

int TCG200::Snap()
{
return CG200Snap(hcg200);
}
su_yum 2002-10-25
  • 打赏
  • 举报
回复
1.在stdafx.h中加入下面得语句;
#include <vfw.h>
#pragma comment(lib,"vfw32.lib")
2.在类定义中加入:
HWND m_hCapWnd;
CAPDRIVERCAPS m_CapDrvCap;
CAPSTATUS m_CapStatus;
CAPTUREPARMS m_Parms;
3。在函数中加入:
CRect rect;
GetDlgItem(显示视频得ID)->GetWindow(&rect);
m_hCapWnd=capCreateCaptureWindow((LPTSTR)TEXT("视频捕捉测试程序"),
WS_CHILD|WS_VISIBLE|WS_EX_CLIENTEDGE|
WS_EX_DLGMODALFRAME,0,0,rect.Width(),rect.Height(),pWnd->GetSafeHwnd(),0); // 设置预示窗口
ASSERT(m_hCapWnd);
if(capDriverConnect(m_hCapWnd,2)){
// 连接第0 号驱动器
// 得到驱动器的性能
capDriverGetCaps(m_hCapWnd,sizeof(CAPDRIVERCAPS),&m_CapDrvCap);
if(m_CapDrvCap.fCaptureInitialized){
// 如果初始化成功
capGetStatus(m_hCapWnd,&m_CapStatus,sizeof(m_CapStatus)); // 得到驱动器状
capPreviewRate(m_hCapWnd,30); // 设置预示帧频
capPreview(m_hCapWnd,TRUE);
//capOverlay(m_hCapWnd,TRUE); // 设置预示方式
}
else // 初始化未成功
{
// MessageBox("视频捕捉卡初始化失败!","错误",MB_ICONERROR| MB_OK);
}
}
else
{// 未能连接到驱动器
//MessageBox ("与视频捕捉卡连接失败!","错误",MB_ICONERROR| MB_OK);
}

就可以实现最简单得视频显示了。
具体可参考MSDN里面得capXXX;
lin6194 2002-10-25
  • 打赏
  • 举报
回复
有个用VFW的类,发给你了。
BaoYu 2002-10-24
  • 打赏
  • 举报
回复
谁有例子,借参考一下。谢谢大侠。
baohongyu@163.net
MXHCXY 2002-10-24
  • 打赏
  • 举报
回复
audw95.dll只支持windows 95 和windows 98这种16位操作系统,在2000这种32位操作系统中不行,如果想开发一个所有采集卡都能在2000下视频采集的程序,建议采用微软的directshow标准接口来做,否则只能通过视频采集卡厂商提供2000下的api接口了。
BaoYu 2002-10-23
  • 打赏
  • 举报
回复
VFW/WDM是什么?
好像系统里有公用的函数吧?95/98下用AUDW95.DLL就可以。2000下不行。
faxiao 2002-10-23
  • 打赏
  • 举报
回复
用VFW或者WDM做
evildoer 2002-10-23
  • 打赏
  • 举报
回复
gz
sunziguang 2002-10-23
  • 打赏
  • 举报
回复
关注中
wangyulei 2002-10-23
  • 打赏
  • 举报
回复
VFW
linclouds 2002-10-23
  • 打赏
  • 举报
回复
VFW最简单了!
lin6194 2002-10-23
  • 打赏
  • 举报
回复
用VFW或者Direct Show

2,641

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧