功能简介:程序运行后点击拍照,直接显示摄像区,点击截取图片可以截取一张照片,并存入数据库,但是不能改变照片的大小,我想拍摄出特定大小的照片,一寸的。有没有能帮忙的啊using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO;
using System.Data.SqlClient;
using System.Configuration;namespace 摄像头
{
public partial class CameraForm : Form
{
/// <summary>
/// 获取系统安装的摄像头列表
/// </summary>
/// <returns>返回格式:0|USB视频设备|1|USB摄像头,其中0或1是摄像头ID</returns>
[DllImport("VedioCapture.dll")]
private extern static string GetCameraList();
/// <summary>
/// 设置打开的摄像头ID
/// </summary>
/// <param name="value">GetCameraList中列举的摄像头ID</param>
/// <returns>返回0,设置成功</returns>
[DllImport("VedioCapture.dll")]
private extern static int SetCameraID(int value);
/// <summary>
/// 打开SetCameraID中设置的摄像头
/// </summary>
/// <param name="Handle">要显示视频的控件</param>
/// <returns>摄像头句柄</returns>
[DllImport("VedioCapture.dll")]
private extern static IntPtr StartCamera(IntPtr Handle);
/// <summary>
/// 关闭摄像头
/// </summary>
/// <param name="hWndC">摄像头句柄</param>
/// <returns>返回0,设置成功</returns>
[DllImport("VedioCapture.dll")]
private extern static int CloseCamera(IntPtr hWndC);
/// <summary>
/// 截取BMP格式的视频图像
/// </summary>
/// <param name="hWndC">摄像头句柄</param>
/// <param name="cFileName">截取的bmp文件名,或则-1(代表内存图片)</param>
/// <returns>如果cFileName传入文件名,返回0,截取成功;如果cFileName传入-1,返回bmp图片的句柄(请使用后注意释放)</returns>
[DllImport("VedioCapture.dll")]
private extern static int SaveBmp(IntPtr hWndC, string cFileName);
/// <summary>
/// 开始录制视频
/// </summary>
/// <param name="hWndC">摄像头句柄</param>
/// <param name="cFileName">视频文件名</param>
/// <returns>返回0,开始录制</returns>
[DllImport("VedioCapture.dll")]
private extern static int RecordVideo(IntPtr hWndC, string cFileName);
/// <summary>
/// 停止录制视频
/// </summary>
/// <param name="hWndC">摄像头句柄</param>
/// <returns>返回0,停止成功</returns>
[DllImport("VedioCapture.dll")]
private extern static int StopRecord(IntPtr hWndC);
/// <summary>
/// 将现有的图片文件制作成视频,仅支持bmp和jpg格式的图片
/// </summary>
/// <param name="cPath">图片文件所在路径,以/结尾</param>
/// <param name="cFileName">制作后的视频文件名</param>
/// <param name="cFileType">图片类型:jpg或bmp</param>
/// <param name="FrameRate">视频写入帧率,摄像头常用15帧,</param>
/// <returns>返回0,制作成功</returns>
[DllImport("VedioCapture.dll")]
private extern static int CreateVideoByFiles(string cPath, string cFileName, string cFileType, int FrameRate); string AppPath = "";
public CameraForm()
{
InitializeComponent();
AppPath = Application.StartupPath + "\\";
} private void button1_Click(object sender, EventArgs e)
{
try
{ listView1.Items.Clear();
string[] strdev = GetCameraList().Split('|');
if (strdev.Length < 2) return;
int i = 0;
ListViewItem lvi = null;
while (i < strdev.Length)
{
if (strdev[i] != "")
{
lvi = new ListViewItem(strdev[i]);
lvi.SubItems.Add(strdev[i + 1]);
listView1.Items.Add(lvi);
}
i = i + 2; }
}
catch
{
MessageBox.Show("没有设备!");
}
}
IntPtr camerah = IntPtr.Zero;
private void button2_Click(object sender, EventArgs e)
{
if (listView1.SelectedItems == null || listView1.SelectedItems.Count == 0) return;
string DevIndex = listView1.SelectedItems[0].Text;
int Result = SetCameraID(int.Parse(DevIndex));
if (Result != 0)
{
MessageBox.Show("设备打开失败");
return;
}
camerah = StartCamera(panel1.Handle);
} private void button3_Click(object sender, EventArgs e)
{
CloseCamera(camerah);
} private void button4_Click(object sender, EventArgs e)
{
if (camerah != IntPtr.Zero)
{
//传入文件路径
string path;
this.saveFileDialog1.Filter = "图片*.bmp;*.jpg;.jpeg;*.gif|*.bmp|所有文件(*.*)|*.*";
if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
{
path = this.saveFileDialog1.FileName;
SaveBmp(camerah, path);
//传入-1,返回内存图片
IntPtr iptr = (IntPtr)SaveBmp(camerah, "-1");
Bitmap bmp = Bitmap.FromHbitmap(iptr);
// Bitmap bitNew = new Bitmap(path, 80, 100);
bmp.Save(path);
bmp.Dispose();
byte[] photo = PhotoToArray(path);
SqlConnection cn = new SqlConnection(ConfigurationSettings.AppSettings["video"].ToString());
cn.Open(); try
{
string sql = "insert into vedio(photo,beizhu) values(@picture,'张三')";
//string sql = "update shexiangtou set photo=(@picture) where id=1"; //这个Id测试的时候可以写死,可以改
//string sql = "update vedio set beizhu=(@picture) where id=1";
SqlParameter param = new SqlParameter();
param = new SqlParameter("@picture", SqlDbType.Image);
//param = new SqlParameter("@picture", SqlDbType.NVarChar);
param.Value = photo;
SqlCommand commd = new SqlCommand(sql, cn);
commd.Parameters.Add(param); int i = commd.ExecuteNonQuery();
if (i > 0)
{
MessageBox.Show("图片插入成功!");
}
else
{
//MessageBox.Show("更新图片失败!");
}
}
catch (Exception ex)
{ }
finally
{
cn.Close();
}
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO;
using System.Data.SqlClient;
using System.Configuration;namespace 摄像头
{
public partial class CameraForm : Form
{
/// <summary>
/// 获取系统安装的摄像头列表
/// </summary>
/// <returns>返回格式:0|USB视频设备|1|USB摄像头,其中0或1是摄像头ID</returns>
[DllImport("VedioCapture.dll")]
private extern static string GetCameraList();
/// <summary>
/// 设置打开的摄像头ID
/// </summary>
/// <param name="value">GetCameraList中列举的摄像头ID</param>
/// <returns>返回0,设置成功</returns>
[DllImport("VedioCapture.dll")]
private extern static int SetCameraID(int value);
/// <summary>
/// 打开SetCameraID中设置的摄像头
/// </summary>
/// <param name="Handle">要显示视频的控件</param>
/// <returns>摄像头句柄</returns>
[DllImport("VedioCapture.dll")]
private extern static IntPtr StartCamera(IntPtr Handle);
/// <summary>
/// 关闭摄像头
/// </summary>
/// <param name="hWndC">摄像头句柄</param>
/// <returns>返回0,设置成功</returns>
[DllImport("VedioCapture.dll")]
private extern static int CloseCamera(IntPtr hWndC);
/// <summary>
/// 截取BMP格式的视频图像
/// </summary>
/// <param name="hWndC">摄像头句柄</param>
/// <param name="cFileName">截取的bmp文件名,或则-1(代表内存图片)</param>
/// <returns>如果cFileName传入文件名,返回0,截取成功;如果cFileName传入-1,返回bmp图片的句柄(请使用后注意释放)</returns>
[DllImport("VedioCapture.dll")]
private extern static int SaveBmp(IntPtr hWndC, string cFileName);
/// <summary>
/// 开始录制视频
/// </summary>
/// <param name="hWndC">摄像头句柄</param>
/// <param name="cFileName">视频文件名</param>
/// <returns>返回0,开始录制</returns>
[DllImport("VedioCapture.dll")]
private extern static int RecordVideo(IntPtr hWndC, string cFileName);
/// <summary>
/// 停止录制视频
/// </summary>
/// <param name="hWndC">摄像头句柄</param>
/// <returns>返回0,停止成功</returns>
[DllImport("VedioCapture.dll")]
private extern static int StopRecord(IntPtr hWndC);
/// <summary>
/// 将现有的图片文件制作成视频,仅支持bmp和jpg格式的图片
/// </summary>
/// <param name="cPath">图片文件所在路径,以/结尾</param>
/// <param name="cFileName">制作后的视频文件名</param>
/// <param name="cFileType">图片类型:jpg或bmp</param>
/// <param name="FrameRate">视频写入帧率,摄像头常用15帧,</param>
/// <returns>返回0,制作成功</returns>
[DllImport("VedioCapture.dll")]
private extern static int CreateVideoByFiles(string cPath, string cFileName, string cFileType, int FrameRate); string AppPath = "";
public CameraForm()
{
InitializeComponent();
AppPath = Application.StartupPath + "\\";
} private void button1_Click(object sender, EventArgs e)
{
try
{ listView1.Items.Clear();
string[] strdev = GetCameraList().Split('|');
if (strdev.Length < 2) return;
int i = 0;
ListViewItem lvi = null;
while (i < strdev.Length)
{
if (strdev[i] != "")
{
lvi = new ListViewItem(strdev[i]);
lvi.SubItems.Add(strdev[i + 1]);
listView1.Items.Add(lvi);
}
i = i + 2; }
}
catch
{
MessageBox.Show("没有设备!");
}
}
IntPtr camerah = IntPtr.Zero;
private void button2_Click(object sender, EventArgs e)
{
if (listView1.SelectedItems == null || listView1.SelectedItems.Count == 0) return;
string DevIndex = listView1.SelectedItems[0].Text;
int Result = SetCameraID(int.Parse(DevIndex));
if (Result != 0)
{
MessageBox.Show("设备打开失败");
return;
}
camerah = StartCamera(panel1.Handle);
} private void button3_Click(object sender, EventArgs e)
{
CloseCamera(camerah);
} private void button4_Click(object sender, EventArgs e)
{
if (camerah != IntPtr.Zero)
{
//传入文件路径
string path;
this.saveFileDialog1.Filter = "图片*.bmp;*.jpg;.jpeg;*.gif|*.bmp|所有文件(*.*)|*.*";
if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
{
path = this.saveFileDialog1.FileName;
SaveBmp(camerah, path);
//传入-1,返回内存图片
IntPtr iptr = (IntPtr)SaveBmp(camerah, "-1");
Bitmap bmp = Bitmap.FromHbitmap(iptr);
// Bitmap bitNew = new Bitmap(path, 80, 100);
bmp.Save(path);
bmp.Dispose();
byte[] photo = PhotoToArray(path);
SqlConnection cn = new SqlConnection(ConfigurationSettings.AppSettings["video"].ToString());
cn.Open(); try
{
string sql = "insert into vedio(photo,beizhu) values(@picture,'张三')";
//string sql = "update shexiangtou set photo=(@picture) where id=1"; //这个Id测试的时候可以写死,可以改
//string sql = "update vedio set beizhu=(@picture) where id=1";
SqlParameter param = new SqlParameter();
param = new SqlParameter("@picture", SqlDbType.Image);
//param = new SqlParameter("@picture", SqlDbType.NVarChar);
param.Value = photo;
SqlCommand commd = new SqlCommand(sql, cn);
commd.Parameters.Add(param); int i = commd.ExecuteNonQuery();
if (i > 0)
{
MessageBox.Show("图片插入成功!");
}
else
{
//MessageBox.Show("更新图片失败!");
}
}
catch (Exception ex)
{ }
finally
{
cn.Close();
}
}
}
}
解决方案 »
- XtraGrid如何手动合并单元格
- C# 会员系统并发控制 求指导
- datagridview 计算列动态变化
- 关于查询条件在多数据库支持模式下参数传递的解决办法
- c#编译的软件加入启动里面,电脑重新 启动后运行软件 数据文件加载出错? 直接点击运行就没有问题?这是什么毛病?
- 提交页面时为什么不触发datagrid的 databound事件啊
- 如何定位在webform下的一个button?
- 請問如何將一個圖片文件保存至ORACLE數據庫?
- 请教,C#程序能否编写类似于金山词霸的软件,能否控制其它应用程序,向其他的应用程序中发送控制消息,能否监视用户的键盘和鼠标操作。
- 奇偶魔方的C#代码
- c# 调用MessageBox.Show弹出确认框,点“确定”或“取消”后,不是返回当前程序的窗口?
- asp.net C# 保存字符串 加号不翼而飞..................................................求解
private byte[] PhotoToArray(string path)
{
FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read);
byte[] bufferPhoto = new byte[stream.Length];
stream.Read(bufferPhoto, 0, Convert.ToInt32(stream.Length));
stream.Flush();
stream.Close();
return bufferPhoto;
} //private void button5_Click(object sender, EventArgs e)
//{
// if (camerah != IntPtr.Zero)
// RecordVideo(camerah, AppPath + DateTime.Now.ToString("yyyyMMddHHmmss") + ".avi");
//} private void button6_Click(object sender, EventArgs e)
{
if (camerah != IntPtr.Zero) StopRecord(camerah);
} private void button7_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.SelectedPath = AppPath;
if (fbd.ShowDialog() != DialogResult.OK)
{
fbd.Dispose();
return;
}
string path = fbd.SelectedPath;
int Result = CreateVideoByFiles(path + "\\", AppPath + "test.avi", "jpg", 15);
if (Result == 0) MessageBox.Show("生成完毕");
} private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{ } private void button5_Click(object sender, EventArgs e)
{
SqlConnection connect = new SqlConnection(ConfigurationSettings.AppSettings["video"].ToString());
connect.Open();
string strSQL = "Select [photo] From [vedio] Where [id]=(@id)";
SqlParameter param = new SqlParameter();
param = new SqlParameter("@id", SqlDbType.Int);
param.Value = textBox1.Text; //测试的时候可以写死如param.Value=1 SqlCommand cmd = new SqlCommand(strSQL, connect);
cmd.Parameters.Add(param);
SqlDataReader reader = cmd.ExecuteReader(); reader.Read();
byte[] pic = (byte[])reader["photo"];
MemoryStream ms = new MemoryStream(pic);
System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);
this.pictureBox1.Image = image;
} private void CameraForm_Load(object sender, EventArgs e)
{ //SqlConnection connect = new SqlConnection(ConfigurationSettings.AppSettings["video"].ToString());
//connect.Open();
//SqlDataAdapter sa = new SqlDataAdapter("select id from vedio",connect);
//DataTable dt = new DataTable();
//sa.Fill(dt);
//connect.Close();
try
{
string[] strdev = GetCameraList().Split('|');
if (strdev.Length < 2)
{
MessageBox.Show("没有设备!"); }
else if (strdev.Length == 3)
{
string DevIndex = strdev[0];
int Result = SetCameraID(int.Parse(DevIndex));
if (Result != 0)
{
MessageBox.Show("设备打开失败");
return;
}
camerah = StartCamera(panel1.Handle);
} else
{ }
}
catch
{
MessageBox.Show("没有设备!");
}
}
}
}