VS2010开发MFC ActiveX,摄像头拍照上传Webservice(2)
继续记录,第二步开发摄像头拍照功能.
使用vfw.h开发摄像头拍照功能,关于vfw网上有很多文章,很多代码可以参考
参考:http://blog.163.com/huangqiao_8/blog/static/33900492008017111847364/
Vedio for Windows 是WIN32 SDK 中多媒体编程SDK 的视频开发工具。在微软的Visual C ++中提供了Vedio for Windows 的头文件vfw.h 和库文件vfw32.lib。
在ActiveX中显示的Dialog中增加一个picture控件,设置ID为IDC_VIDEO,加入按钮,打开摄像头,拍照等,下面会贴入关键代码:
1.引入vfw.h
#include <vfw.h>
#pragma comment(lib,"vfw32.lib")
//如果没有引入afxcmn.h,在stdafx.h中添加:
//#include <afxcmn.h>
2.在对话框的头文件中加入如下变量
public:
friend UINT vproc(LPVOID pParam);
friend LRESULT CALLBACK backproc(HWND hwnd,LPVIDEOHDR lpVHDR);
private:
HWND videohwnd;
CEvent e;
CStatic CAPVIDEO;
BITMAPINFO *mapinfo;
PBITMAPINFO tran;
//补充下 在对话框的DoDataExchange方法中添加如下代码:
DDX_Control(pDX, IDC_CAPVIDEO, CAPVIDEO);//绑定控件IDC_CAPVIDEO和变量
3.打开摄像头按钮内的代码
CRect rc;
CAPVIDEO.GetWindowRect(&rc);
ScreenToClient(rc); CAPDRIVERCAPS capd;
CAPSTATUS caps;
tran=NULL;
e.ResetEvent();
AfxBeginThread(vproc,(void*)this);
::WaitForSingleObject(e,INFINITE); if(capDriverConnect(videohwnd,)==TRUE)
{
capDriverGetCaps(videohwnd,sizeof(CAPDRIVERCAPS),&capd);
capGetStatus(videohwnd,&caps,sizeof(CAPSTATUS));
::SetParent(videohwnd,*this); ::SetWindowLong(videohwnd,GWL_STYLE,WS_CHILD);
::SetWindowPos(videohwnd,NULL,rc.left,rc.top,
rc.Width(),rc.Height(),SWP_NOZORDER);
::ShowWindow(videohwnd,SW_SHOW);
//capPreviewScale(videohwnd, 1);
capPreviewRate(videohwnd,);
capPreview(videohwnd,true);
} else
{
AfxMessageBox("创建失败");
}
4.vproc方法
static UINT vproc(LPVOID pParam)
{
CViewDialog *p=(CViewDialog*)pParam;
HWND hwnd=capCreateCaptureWindow(NULL,WS_POPUP,0,0,10,10,0,0);
if(hwnd)
{
p->videohwnd=hwnd;
p->e.SetEvent();
}
MSG Msg;
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
5.拍照按钮内的代码
LPWSTR picUrl=_T("d:/123.bmp");
capFileSaveDIB(videohwnd,picUrl);
现在可以存出图了,但是bmp格式不常用,下次记录裁剪bmp和转换bmp为jpg.
有一段弯路,图片控件ID默认是IDC_STATIC,开始没有修改初始化时报错因为ID重复,修改后就好了...
VS2010开发MFC ActiveX,摄像头拍照上传Webservice(2)的更多相关文章
- VS2010开发MFC ActiveX,摄像头拍照上传Webservice(1)
最近工作项目,BS中需要用到摄像头拍照,需要存储本地,同时上传到服务器,尝试使用vc++做ActiveX来实现. 完全没有使用过vc,上网搜索各种知识,初步完成.在这里记录下有帮助的资料. 第一步:编 ...
- 【VS开发】使用VS2010创建MFC ActiveX工程项目
1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括WEB网页,应用程序窗体等... Activ ...
- html5调用手机摄像头,实现拍照上传功能
今天做手机网站,想实现手机扫描二维码功能.首先实现在浏览器中调用手机摄像头,实现拍照功能并且把拍下的照片显示在页面并上传到服务器上,然后再在服务器端进行分析. 首先实现在浏览器中调用摄像头,当然用现在 ...
- [ActiveX]使用VS2010创建MFC ActiveX工程项目
ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能队列运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括web网页,应用程序窗体等等. ActiveX控 ...
- webAPP如何实现移动端拍照上传(Vue组件示例)?
摘要:使用HTML5编写移动Web应用,主要是为了尝试一下“一套代码多处运行”,一个webapp几乎可以不加修改的运行在PC/Android/iOS等上面运行.但是写到现在觉得虽然这种方式弊大于利,不 ...
- C++ 使用VS2010创建MFC ActiveX工程项目
1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括WEB网页,应用程序窗体等... Activ ...
- c++ ActiveX基础1:使用VS2010创建MFC ActiveX工程项目
1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括WEB网页,应用程序窗体等... Activ ...
- 【Demo】HTML5 拍照上传
本文主要讲解 手机浏览器 如何拍照 为什么会有这个需求 最近做一个项目要用到拍照然后上传照片,但是网页拍照一般都是用Flash做的,而我们主要是H5页面,如果在微信里面有权限就可以通过JSSDK调起摄 ...
- android 拍照上传文件 原生定位
最近公司需要一个android拍照上传和定位功能的的单一功能页面,一开始选择ionic cordova angular的一套H5框架,但是遇到和上传文件报错的问题,bug找了一天没找到原因,怀疑是io ...
随机推荐
- Hystrix熔断机制原理剖析
一.前言 在分布式系统架构中多个系统之间通常是通过远程RPC调用进行通信,也就是 A 系统调用 B 系统服务,B 系统调用 C 系统的服务.当尾部应用 C 发生故障而系统 B 没有服务降级时候可能会导 ...
- 雷林鹏分享:Ruby CGI Cookies
Ruby CGI Cookies HTTP协议是无状态协议.但对于一个商业网站,它需要保持不同的页面间的会话信息. 如用户在网站注册过程中需要跳转页面,但又要保证之前填写的信息部丢失. 这种情况下 C ...
- Mybatis出现参数错误Parameter 'cateCode_search' not found. Available parameters are [3, 2, 1, 0, param1, param2, 5, param3, 4, param4, param5, param6]
1.参数改为序号 2.在mybatis借口上加@Param注解
- 2-14 MySQL初步认识,及CentOS6.8环境,源码方式安装MySQL
什么是数据库: 存放数据的仓库RDBMS-->(Relational Database Management System) 关系型数据库管理系统DBMS--->(Database Man ...
- New Concept English Two 8 19
pls practice every day $课文17 青春常驻 161. My aunt Jennifer is an actress. 我的姑姑詹妮弗是位演员, 162. She must b ...
- PostgreSQL逻辑复制槽
Schema | Name | Result data type | Argument data types | Type ------------+------------------------- ...
- Linux运维学习笔记-常用快捷键及vi、vim总结
vim是vi的增强版,vim完全兼容vi
- 从event loop规范探究javaScript异步及浏览器更新渲染时机
异步的思考 event loops隐藏得比较深,很多人对它很陌生.但提起异步,相信每个人都知道.异步背后的“靠山”就是event loops.这里的异步准确的说应该叫浏览器的event loops或者 ...
- Linux 脚本编写
第一个shell脚本编写 #!/bin/bash # 上面中的 #! 是一种约定标记, 它可以告诉系统这个脚本需要什么样的解释器来执行; #定义变量: APP_BASE_PATH="/opt ...
- python eval, exec. compile
compile 编译某段代码, (将一个字符串编译为字节代码), 以方便重复调用. exec 可以理解为和if, for一样是一个语法声明, 而不是一个函数. 注意globals和locals的含义. ...