28 个解决方案
#1
DirectShow
#2
#3
看看是怎么做的
#4
谢谢
#5
很多资料。
#6
我这有源代码
#7
#8
控制摄像头?必须知道步进电机。
#9
#include <AFX.h>
#include "StdAfx.h"
#include <VFW.H>
#include <stdio.h>
#pragma comment(lib,"VFW32.LIB")
HWND AVIhWnd = 0;
HWND hWnd = 0;
HDC hDC = 0;
HDC ScenehDC = 0;
DWORD AVIWidth = 640;
DWORD AVIHeight = 480;
DWORD DCColorBits = 32;
BYTE BmpByte[1920*480];
BITMAPINFO DCitmap;
HBITMAP SceneBitmap;
HGDIOBJ AboriginaalObject;
LPCSTR szClassName;
LPCSTR szWindowTitle;
long X;
long Y;
long OutWidth;
long InputWidth;
long cR;
long cG;
long cB;
static LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
static LRESULT CALLBACK FrameCallbackProc(HWND, LPVIDEOHDR);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
szClassName = "myClass";
szWindowTitle = "MyWindow";
WNDCLASS wc;
wc.style = CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc = MainWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_3DSHADOW);
wc.lpszMenuName = NULL;
wc.lpszClassName = szClassName;
RegisterClass(&wc);
hWnd = CreateWindow(szClassName,
szWindowTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
AVIWidth,
AVIHeight,
NULL,
NULL,
hInstance,
NULL);
if (!hWnd){
MessageBox(0,TEXT("创建窗口失败!\r\n"),"", MB_OK);
return (FALSE);
}
ShowWindow(hWnd, SW_SHOWNORMAL);
UpdateWindow(hWnd);
ScenehDC = CreateCompatibleDC(hDC);
ZeroMemory(&DCitmap.bmiHeader, sizeof(BITMAPINFOHEADER));
DCitmap.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
DCitmap.bmiHeader.biBitCount = 24;
DCitmap.bmiHeader.biWidth = AVIWidth;
DCitmap.bmiHeader.biHeight = AVIHeight;
DCitmap.bmiHeader.biPlanes = 1;
DCitmap.bmiHeader.biClrUsed = 0;
DCitmap.bmiHeader.biClrImportant = 0;
DCitmap.bmiHeader.biSizeImage = AVIWidth * AVIHeight * (DCitmap.bmiHeader.biBitCount / 8);
SceneBitmap = CreateDIBSection(ScenehDC, &DCitmap, DIB_RGB_COLORS, NULL ,0 , 0);
AboriginaalObject = SelectObject(ScenehDC, (HGDIOBJ)SceneBitmap);
OutWidth = AVIWidth * 3;
InputWidth = AVIWidth * 3;
int rd;
BITMAPINFOHEADER bmpFormat;
AVIhWnd = capCreateCaptureWindow((LPSTR)"视频追踪",
WS_CHILD | WS_VISIBLE,
0, 0, AVIWidth, AVIHeight,
hWnd,
1);
if (AVIhWnd==0)
{
MessageBox(hWnd, "创建AVI窗口失败","提示",64);
}else{
hDC = GetWindowDC(hWnd);
capSetCallbackOnFrame(AVIhWnd,(FARPROC)FrameCallbackProc);
rd = capDriverConnect(AVIhWnd,0);
if(rd != 0){
CAPDRIVERCAPS *Caps;
capDriverGetCaps(AVIhWnd,sizeof(CAPDRIVERCAPS),&Caps);
capPreviewRate(AVIhWnd, 30);
}else{
MessageBox(hWnd, "不能打开设备驱动。","提示",64);
}
}
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
SelectObject(ScenehDC, AboriginaalObject);
DeleteObject((HGDIOBJ)SceneBitmap);
DeleteDC(ScenehDC);
return 0;
}
LRESULT CALLBACK MainWndProc(HWND hWnd,UINT Message,WPARAM wParam,LPARAM lParam)
{
switch (Message) {
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, Message, wParam, lParam));
}
return 0;
}
LRESULT CALLBACK FrameCallbackProc(HWND ghWnd,LPVIDEOHDR lpVData)
{
for(Y=1; Y<=AVIHeight; Y++)
{
for(X=1; X<=AVIWidth; X++)
{
cB = lpVData->lpData[((AVIHeight-Y)*InputWidth)+(X*3)];
cG = lpVData->lpData[((AVIHeight-Y)*InputWidth)+(X*3)+1];
cR = lpVData->lpData[((AVIHeight-Y)*InputWidth)+(X*3)+2];
BmpByte[((Y-1)*OutWidth)+(X*3)]=cB;
BmpByte[((Y-1)*OutWidth)+(X*3)+1]=cG;
BmpByte[((Y-1)*OutWidth)+(X*3)+2]=cR;
}
}
SetBitmapBits(SceneBitmap,sizeof(BmpByte),BmpByte);
BitBlt(hDC, 0, 0, AVIWidth, AVIHeight, ScenehDC, 0, 0, SRCCOPY);
return 0;
}
#10
友情帮顶。。。
#11
我勒个去,里面是神马东西啊。。。
#12
里边就是实现控制拍照的东西,不过窗体消息哪些函数你看不懂也没法了
#13
前些天用VFW做了拍照的
调用一下很简单哩
调用一下很简单哩
#14
directshow or vfw 或者有些摄像头提供的库函数
#15
有没有远程的摄像头监控例子啊?
#16
在我的资源里面有两个摄像头的完整源程序,控制一个的和控制两个摄像头的,你可以下下来看看,用VFW写的
#17
学习Tain协议也可以帮你完成。
#18
路过 帮顶
#19
今天又学习了,顶……
#20
能实现吗 ? 看来的检验下
#21
能给我份吗
我的邮箱: cc5412330@163.com 或者 10068170932@qq.com
#22
还得懂硬件吗??
#23
谢谢
#25
很有用呀~
#26
二楼给的链接(http://download.chinaprj.cn/detail/BqTDqDs)是个垃圾网站,点下链接一下子跳出N多广告,而且没有想要的东西下载,下载下来居然是个EXE文件,不知道是什么东西。
#27
代码可以发我一份吗?690905084@qq.com
#28
不得不说 2楼给的地址无法下载到源码了,可能失效了吧,描述状况同26楼
#1
DirectShow
#2
#3
看看是怎么做的
#4
谢谢
#5
很多资料。
#6
我这有源代码
#7
#8
控制摄像头?必须知道步进电机。
#9
#include <AFX.h>
#include "StdAfx.h"
#include <VFW.H>
#include <stdio.h>
#pragma comment(lib,"VFW32.LIB")
HWND AVIhWnd = 0;
HWND hWnd = 0;
HDC hDC = 0;
HDC ScenehDC = 0;
DWORD AVIWidth = 640;
DWORD AVIHeight = 480;
DWORD DCColorBits = 32;
BYTE BmpByte[1920*480];
BITMAPINFO DCitmap;
HBITMAP SceneBitmap;
HGDIOBJ AboriginaalObject;
LPCSTR szClassName;
LPCSTR szWindowTitle;
long X;
long Y;
long OutWidth;
long InputWidth;
long cR;
long cG;
long cB;
static LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
static LRESULT CALLBACK FrameCallbackProc(HWND, LPVIDEOHDR);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
szClassName = "myClass";
szWindowTitle = "MyWindow";
WNDCLASS wc;
wc.style = CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc = MainWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_3DSHADOW);
wc.lpszMenuName = NULL;
wc.lpszClassName = szClassName;
RegisterClass(&wc);
hWnd = CreateWindow(szClassName,
szWindowTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
AVIWidth,
AVIHeight,
NULL,
NULL,
hInstance,
NULL);
if (!hWnd){
MessageBox(0,TEXT("创建窗口失败!\r\n"),"", MB_OK);
return (FALSE);
}
ShowWindow(hWnd, SW_SHOWNORMAL);
UpdateWindow(hWnd);
ScenehDC = CreateCompatibleDC(hDC);
ZeroMemory(&DCitmap.bmiHeader, sizeof(BITMAPINFOHEADER));
DCitmap.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
DCitmap.bmiHeader.biBitCount = 24;
DCitmap.bmiHeader.biWidth = AVIWidth;
DCitmap.bmiHeader.biHeight = AVIHeight;
DCitmap.bmiHeader.biPlanes = 1;
DCitmap.bmiHeader.biClrUsed = 0;
DCitmap.bmiHeader.biClrImportant = 0;
DCitmap.bmiHeader.biSizeImage = AVIWidth * AVIHeight * (DCitmap.bmiHeader.biBitCount / 8);
SceneBitmap = CreateDIBSection(ScenehDC, &DCitmap, DIB_RGB_COLORS, NULL ,0 , 0);
AboriginaalObject = SelectObject(ScenehDC, (HGDIOBJ)SceneBitmap);
OutWidth = AVIWidth * 3;
InputWidth = AVIWidth * 3;
int rd;
BITMAPINFOHEADER bmpFormat;
AVIhWnd = capCreateCaptureWindow((LPSTR)"视频追踪",
WS_CHILD | WS_VISIBLE,
0, 0, AVIWidth, AVIHeight,
hWnd,
1);
if (AVIhWnd==0)
{
MessageBox(hWnd, "创建AVI窗口失败","提示",64);
}else{
hDC = GetWindowDC(hWnd);
capSetCallbackOnFrame(AVIhWnd,(FARPROC)FrameCallbackProc);
rd = capDriverConnect(AVIhWnd,0);
if(rd != 0){
CAPDRIVERCAPS *Caps;
capDriverGetCaps(AVIhWnd,sizeof(CAPDRIVERCAPS),&Caps);
capPreviewRate(AVIhWnd, 30);
}else{
MessageBox(hWnd, "不能打开设备驱动。","提示",64);
}
}
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
SelectObject(ScenehDC, AboriginaalObject);
DeleteObject((HGDIOBJ)SceneBitmap);
DeleteDC(ScenehDC);
return 0;
}
LRESULT CALLBACK MainWndProc(HWND hWnd,UINT Message,WPARAM wParam,LPARAM lParam)
{
switch (Message) {
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, Message, wParam, lParam));
}
return 0;
}
LRESULT CALLBACK FrameCallbackProc(HWND ghWnd,LPVIDEOHDR lpVData)
{
for(Y=1; Y<=AVIHeight; Y++)
{
for(X=1; X<=AVIWidth; X++)
{
cB = lpVData->lpData[((AVIHeight-Y)*InputWidth)+(X*3)];
cG = lpVData->lpData[((AVIHeight-Y)*InputWidth)+(X*3)+1];
cR = lpVData->lpData[((AVIHeight-Y)*InputWidth)+(X*3)+2];
BmpByte[((Y-1)*OutWidth)+(X*3)]=cB;
BmpByte[((Y-1)*OutWidth)+(X*3)+1]=cG;
BmpByte[((Y-1)*OutWidth)+(X*3)+2]=cR;
}
}
SetBitmapBits(SceneBitmap,sizeof(BmpByte),BmpByte);
BitBlt(hDC, 0, 0, AVIWidth, AVIHeight, ScenehDC, 0, 0, SRCCOPY);
return 0;
}
#10
友情帮顶。。。
#11
我勒个去,里面是神马东西啊。。。
#12
里边就是实现控制拍照的东西,不过窗体消息哪些函数你看不懂也没法了
#13
前些天用VFW做了拍照的
调用一下很简单哩
调用一下很简单哩
#14
directshow or vfw 或者有些摄像头提供的库函数
#15
有没有远程的摄像头监控例子啊?
#16
在我的资源里面有两个摄像头的完整源程序,控制一个的和控制两个摄像头的,你可以下下来看看,用VFW写的
#17
学习Tain协议也可以帮你完成。
#18
路过 帮顶
#19
今天又学习了,顶……
#20
能实现吗 ? 看来的检验下
#21
能给我份吗
我的邮箱: cc5412330@163.com 或者 10068170932@qq.com
#22
还得懂硬件吗??
#23
谢谢
#24
#25
很有用呀~
#26
二楼给的链接(http://download.chinaprj.cn/detail/BqTDqDs)是个垃圾网站,点下链接一下子跳出N多广告,而且没有想要的东西下载,下载下来居然是个EXE文件,不知道是什么东西。
#27
代码可以发我一份吗?690905084@qq.com
#28
不得不说 2楼给的地址无法下载到源码了,可能失效了吧,描述状况同26楼