C#摄像头实现拍照功能的简单代码示例
C#摄像头实现拍照功能的简单代码示例
2009-11-20 来自:网上整理字体大小:【大中小】
·摘要:这里将介绍一个C#摄像头实现拍照功能的简单代码示例,代码虽然不短,但是基本上实现了相对应的功能,希望对大家有所帮助。
·
C#摄像头实现拍照功能的简单代码示例
1.using System;
2.using System.Runtime.InteropServices;
3.using System.Drawing;
4.using System.Drawing.Imaging;
5.namespace Video
6.{
7.///
8./// 一个C#摄像头控制类
9.///
10.publicclass VideoWork
11.{
12.privateconstint WM_USER = 0x400;
13.privateconstint WS_CHILD = 0x40000000;
14.privateconstint WS_VISIBLE = 0x10000000;
15.privateconstint WM_CAP_START = WM_USER;
16.privateconstint WM_CAP_STOP = WM_CAP_START + 68;
17.privateconstint WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
18.privateconstint WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
19.privateconstint WM_CAP_SAVEDIB = WM_CAP_START + 25;
20.privateconstint WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
21.privateconstint WM_CAP_SEQUENCE = WM_CAP_START + 62;
22.privateconstint WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;
23.privateconstint WM_CAP_SEQUENCE_NOFILE =WM_CAP_START+ 63;
24.privateconstint WM_CAP_SET_OVERLAY =WM_CAP_START+ 51;
25.privateconstint WM_CAP_SET_PREVIEW =WM_CAP_START+ 50;
26.privateconstint WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START +6;
27.privateconstint WM_CAP_SET_CALLBACK_ERROR=WM_CAP_START +2;
28.privateconstint WM_CAP_SET_CALLBACK_STATUSA= WM_CAP_START +3;
29.privateconstint WM_CAP_SET_CALLBACK_FRAME= WM_CAP_START +5;
30.privateconstint WM_CAP_SET_SCALE=WM_CAP_START+ 53;
31.privateconstint WM_CAP_SET_PREVIEWRATE=WM_CAP_START+ 52;
32.private IntPtr hWndC;
33.privatebool bWorkStart = false;
34.private IntPtr mControlPtr;
35.privateint mWidth;
36.privateint mHeight;
37.privateint mLeft;
38.privateint mTop;
39.
40.///
41./// 初始化显示图像
42.///
43./// 控件的句柄
44./// 开始显示的左边距
45./// 开始显示的上边距
46./// 要显示的宽度
47./// 要显示的长度
48.public VideoWork(IntPtr handle, int left, int top, int width,int height)
49.{
50.mControlPtr = handle;
51.mWidth = width;
52.mHeight = height;
53.mLeft = left;
54.mTop = top;
55.}
56.[DllImport("avicap32.dll")]
57.privatestaticextern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID);
58.[DllImport("avicap32.dll")]
59.privatestaticexternint capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat, int wSize );
60.[DllImport("User32.dll")]
61.privatestaticexternbool SendMessage(IntPtr hWnd, int wMsg, int wParam, long lParam);
62.///
63./// 开始显示图像
64.///
65.publicvoid Start()
66.{
67.if (bWorkStart)
68.return;
69.bWorkStart = true;
70.byte[] lpszName = newbyte[100];
71.hWndC = capCreateCaptureWindowA(lpszName,WS_CHILD|WS_VISIBLE ,mLeft,mTop,mWidth,mHeight,mControlPtr,0);
72.if (hWndC.ToInt32() != 0)
73.{
74.SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0);
75.SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0);
76.SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0);
77.SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
78.SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0);
79.SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0);
80.SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0);
81.SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0);
82.//Global.log.Write("SendMessage");
83.}
84.return;
85.}
86.///
87./// 停止显示
88.///
89.publicvoid Stop()
90.{
91.SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
92.bWorkStart = false;
93.}
94.///
95./// 抓图
96.///
97./// 要保存bmp文件的路径
98.publicvoid GrabImage(string path)
99.{
100.IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
101.SendMessage(hWndC,WM_CAP_SAVEDIB,0,hBmp.ToInt64());
102.}
103.}
104.}
105.
106.//这是一个控制摄像头进行拍照的类,我每次使用GrabImage抓图都是225K的一张照片,我想请问如何才能让我
107.//抓到的图片小一些,我想控制在70K左右。不知怎么让拍照的像素变小?
108.
109.if(this.Request.QueryString["filename"]!=null)
110.{
111.//获取原图片
112.string filename=this.Request.QueryString["filename"];
113.Bitmap bmpOld=new Bitmap(this.Server.MapPath("p_w_picpaths/" + filename));
114.//计算缩小比例
115.double d1;
116.if(bmpOld.Height>bmpOld.Width)
117.d1=(double)(MaxLength/(double)bmpOld.Width);
118.else
119.d1=(double)(MaxLength/(double)bmpOld.Height);
120.//产生缩图
121.Bitmap bmpThumb=new Bitmap(bmpOld,(int)(bmpOld.Width*d1),(int)(bmpOld.Height*d1));
122.//清除缓冲
123.Response.Clear();
124.//生成图片
125.bmpThumb.Save(this.Response.OutputStream,ImageFormat.Jpeg);
126.Response.End();
127.//释放资源
128.bmpThumb.Dispose();
129.bmpOld.Dispose();
130.}
C#摄像头实现拍照功能的简单代码示例就介绍到这里。
转载于:https://blog.51cto.com/3446502/1228106
C#摄像头实现拍照功能的简单代码示例相关推荐
- 机器学习简单代码示例
机器学习简单代码示例 //在gcc-4.7.2下编译通过. //命令行:g++ -Wall -ansi -O2 test.cpp -o test #include <iostream> u ...
- python导入txt文件并绘图-Python实现读取txt文件并画三维图简单代码示例
记忆力差的孩子得勤做笔记! 刚接触python,最近又需要画一个三维图,然后就找了一大堆资料,看的人头昏脑胀的,今天终于解决了!好了,废话不多说,直接上代码! #由三个一维坐标画三维散点 #codin ...
- python读取txt文件代码-Python实现读取txt文件并画三维图简单代码示例
记忆力差的孩子得勤做笔记! 刚接触python,最近又需要画一个三维图,然后就找了一大堆资料,看的人头昏脑胀的,今天终于解决了!好了,废话不多说,直接上代码! #由三个一维坐标画三维散点 #codin ...
- 动态数组vector的使用_简单代码示例
简单代码示例 //动态数组vector的使用 #include <iostream> #include <vector> //用 <vector>头文件 using ...
- python输出箭头代码_python matplotlib 注释文本箭头简单代码示例
注释文本箭头 结果展示: 完整代码示例: import numpy as np import matplotlib.pyplot as plt fig,ax = plt.subplots(figsiz ...
- Python 程序示例 - 初学者的简单代码示例
马克吐温说过,出人头地的秘诀就是开始.编程对于初学者来说似乎令人望而生畏,但最好的入门方式是直接投入并开始编写代码. 简单的代码示例是初学者入门和学习编程基础知识的好方法.在本文中,我将提供一系列非常 ...
- 用html5和javascript调用摄像头实现拍照功能
在机缘巧合之下,了解到用HTML5和javascript调用摄像头来实现拍照功能,今天就把大致原理写下来.页面布局很简单,就是一个input标签,两个HTML5元素video.canvas和一个but ...
- VUE实现调用摄像头和拍照功能
import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.cs ...
- php调取摄像头实现拍照功能
最近做的商户后台要实现调取摄像头拍摄用户打卡照片的功能,找资料研究了下,终于黄天不负有心人,成功了,下面我分步骤将代码贴出来,希望能有帮助 代码有点多,但是每一步都很好理解,首先是HTML代码,写一个 ...
最新文章
- 在Ubuntu 16.04.5 LTS上使用python第三方库QRCode 6.0生成二维码实录
- 基本设计模式:单例模式和工厂模式代码实现
- 【AS3代码】添加/删除XML子元素及属性
- 百度pcs 如何获取Access Token
- “攻城狮”手把手教你物联网智能生活-内网穿透技术
- 物联网 终端设备_您拥有多少个物联网设备?
- MetaException(message:Hive Schema version 2.1.0 does not match metastore‘s schema version 1.2.0 Meta
- mysql自动去重_关于mysql自联去重的一些记录
- Jquery表单清空
- CAPL学习之路-诊断函数
- 谷歌浏览器html5插件怎么设置,谷歌(Chrome)浏览器插件开发教程
- 计算机打印机无法打印机驱动,win7安装打印机出现无法找到打印机驱动程序包...
- html中咋样上传照片,如何通过html上传照片(自定义上传图标)
- 如何彻底清除流氓的2345安全卫士及2345SafeCenterSvc服务?
- 阿里p7程序员哀叹:35岁,被通知合同不再续签
- GitHub上提交代码之写给小白
- AI科普文章 | 语音识别准不准?—— ASR 效果评测原理与实践
- vue中EventBus的实现原理
- mwan,意为mult-wan?
- Colmap论文——《Structure-from-Motion Revisited》论文阅读笔记
热门文章
- 程序日志--要养成好习惯
- 鸡啄米MFC教程笔记之七:对话框:为控件添加消息处理函数
- 代码命名,代码里的命名规则:错误的和正确的对比 命名方法总结 “自我描述的源代码”用代码表达出你的思想,让其他人通过代码能明白你的意图。...
- HC-05蓝牙模块基本使用
- ajax请求后无法实现指定页面跳转或带参数跳转
- mysql gtid寻找位置_【MySQL】UUID与GTID以及如何根据GTID找寻filename和position
- mysql英文介绍_每日科技英文48: MySQL C API简介
- 树莓派与安卓手机app的WIFI通信(局域网通信)
- c51单片机有几个终端语言,吃过大亏,才知道要从51单片机入手
- 日照油库系统推荐_战“疫”快报(3.21)| 油库三期工程罐基础混凝土浇筑全部完成...