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#摄像头实现拍照功能的简单代码示例相关推荐

  1. 机器学习简单代码示例

    机器学习简单代码示例 //在gcc-4.7.2下编译通过. //命令行:g++ -Wall -ansi -O2 test.cpp -o test #include <iostream> u ...

  2. python导入txt文件并绘图-Python实现读取txt文件并画三维图简单代码示例

    记忆力差的孩子得勤做笔记! 刚接触python,最近又需要画一个三维图,然后就找了一大堆资料,看的人头昏脑胀的,今天终于解决了!好了,废话不多说,直接上代码! #由三个一维坐标画三维散点 #codin ...

  3. python读取txt文件代码-Python实现读取txt文件并画三维图简单代码示例

    记忆力差的孩子得勤做笔记! 刚接触python,最近又需要画一个三维图,然后就找了一大堆资料,看的人头昏脑胀的,今天终于解决了!好了,废话不多说,直接上代码! #由三个一维坐标画三维散点 #codin ...

  4. 动态数组vector的使用_简单代码示例

    简单代码示例 //动态数组vector的使用 #include <iostream> #include <vector> //用 <vector>头文件 using ...

  5. python输出箭头代码_python matplotlib 注释文本箭头简单代码示例

    注释文本箭头 结果展示: 完整代码示例: import numpy as np import matplotlib.pyplot as plt fig,ax = plt.subplots(figsiz ...

  6. Python 程序示例 - 初学者的简单代码示例

    马克吐温说过,出人头地的秘诀就是开始.编程对于初学者来说似乎令人望而生畏,但最好的入门方式是直接投入并开始编写代码. 简单的代码示例是初学者入门和学习编程基础知识的好方法.在本文中,我将提供一系列非常 ...

  7. 用html5和javascript调用摄像头实现拍照功能

    在机缘巧合之下,了解到用HTML5和javascript调用摄像头来实现拍照功能,今天就把大致原理写下来.页面布局很简单,就是一个input标签,两个HTML5元素video.canvas和一个but ...

  8. VUE实现调用摄像头和拍照功能

    import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.cs ...

  9. php调取摄像头实现拍照功能

    最近做的商户后台要实现调取摄像头拍摄用户打卡照片的功能,找资料研究了下,终于黄天不负有心人,成功了,下面我分步骤将代码贴出来,希望能有帮助 代码有点多,但是每一步都很好理解,首先是HTML代码,写一个 ...

最新文章

  1. 在Ubuntu 16.04.5 LTS上使用python第三方库QRCode 6.0生成二维码实录
  2. 基本设计模式:单例模式和工厂模式代码实现
  3. 【AS3代码】添加/删除XML子元素及属性
  4. 百度pcs 如何获取Access Token
  5. “攻城狮”手把手教你物联网智能生活-内网穿透技术
  6. 物联网 终端设备_您拥有多少个物联网设备?
  7. MetaException(message:Hive Schema version 2.1.0 does not match metastore‘s schema version 1.2.0 Meta
  8. mysql自动去重_关于mysql自联去重的一些记录
  9. Jquery表单清空
  10. CAPL学习之路-诊断函数
  11. 谷歌浏览器html5插件怎么设置,谷歌(Chrome)浏览器插件开发教程
  12. 计算机打印机无法打印机驱动,win7安装打印机出现无法找到打印机驱动程序包...
  13. html中咋样上传照片,如何通过html上传照片(自定义上传图标)
  14. 如何彻底清除流氓的2345安全卫士及2345SafeCenterSvc服务?
  15. 阿里p7程序员哀叹:35岁,被通知合同不再续签
  16. GitHub上提交代码之写给小白
  17. AI科普文章 | 语音识别准不准?—— ASR 效果评测原理与实践
  18. vue中EventBus的实现原理
  19. mwan,意为mult-wan?
  20. Colmap论文——《Structure-from-Motion Revisited》论文阅读笔记

热门文章

  1. 程序日志--要养成好习惯
  2. 鸡啄米MFC教程笔记之七:对话框:为控件添加消息处理函数
  3. 代码命名,代码里的命名规则:错误的和正确的对比 命名方法总结 “自我描述的源代码”用代码表达出你的思想,让其他人通过代码能明白你的意图。...
  4. HC-05蓝牙模块基本使用
  5. ajax请求后无法实现指定页面跳转或带参数跳转
  6. mysql gtid寻找位置_【MySQL】UUID与GTID以及如何根据GTID找寻filename和position
  7. mysql英文介绍_每日科技英文48: MySQL C API简介
  8. 树莓派与安卓手机app的WIFI通信(局域网通信)
  9. c51单片机有几个终端语言,吃过大亏,才知道要从51单片机入手
  10. 日照油库系统推荐_战“疫”快报(3.21)| 油库三期工程罐基础混凝土浇筑全部完成...