using Microsoft.Win32;
using PaintDotNet.Camera;
using PaintDotNet.Camera;
using PaintDotNet.SystemLayer;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace PaintDotNet.ImageCollect
{
internal partial class CameraVideoRecording : FloatingToolForm
{
///
/// 视频格式
///
private string[] fmtArray = new string[] { "avi" };
// 保存路径
private string m_filePath = Application.StartupPath + "\\Video";
// 持续时间
private int m_duration = 0;
private ICamera m_camera;
private Timer timer1;
bool _recording = false;
bool _done = false;
DateTime _timeLog;
string _filename;
public CameraVideoRecording()
{
InitializeComponent();
InitializeLanguageText();
InitializeControlData();
this.Load += (s, e) =>
{
m_filePath = Settings.CurrentUser.GetString("CameraRecordPath", "");
txtSavePath.Text = m_filePath;
txtPrefix.Text = Settings.CurrentUser.GetString("CameraRecordPrefix", "");
};
this.FormClosing += (s, e) =>
{
Settings.CurrentUser.SetString("CameraRecordPrefix", txtPrefix.Text);
Settings.CurrentUser.SetString("CameraRecordPath", txtSavePath.Text);
};
}
///
/// 设置下拉等数据源
///
private void InitializeControlData()
{
this.cmbVideoFormat.Items.AddRange(fmtArray);
this.cmbVideoFormat.SelectedIndex = 0;
this.txtSavePath.Text = m_filePath;
m_camera = CameraManager.CurrentCamera;
}
private void btnSavePath_Click(object sender, EventArgs e)
{
FolderBrowserDialog folderBroeser = new FolderBrowserDialog();
if (folderBroeser.ShowDialog() == DialogResult.OK)
{
m_filePath = folderBroeser.SelectedPath;
txtSavePath.Text = m_filePath;
}
}
///
/// 开始录制
///
///
///
private void btnStart_Click(object sender, EventArgs e)
{
try
{
if (!Directory.Exists(m_filePath))
{
Directory.CreateDirectory(m_filePath);
}
int bLapse = 1;
if (rdoS.Checked)
{
bLapse = 1000;
}
m_duration = (int)(nudDuration.Value * bLapse);
if (m_duration < 1000)
{
MessageBox.Show(PdnResources.GetString("Menu.Therecordingtimeannotbelessthansecond.Text"));
return;
}
StartRecord();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
void StartRecord()
{
string prefix = txtPrefix.Text.Trim();
_filename = m_filePath + "\\" + prefix + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".avi";
m_camera.RecStart(_filename);
_recording = true;
_timeLog = DateTime.Now;
}
///
/// 结束录制
///
///
///
private void btnStop_Click(object sender, EventArgs e)
{
stopRecording();
_recording = false;
}
private void stopRecording()
{
_recording = false;
_done = true;
m_camera.RecStop();
}
private void CameraVideoRecording_FormClosing(object sender, FormClosingEventArgs e)
{
stopRecording();
}
private void btnPlay_Click(object sender, EventArgs e)
{
if (_filename != null)
{
Process.Start(_filename);
}
}
#region 控件
///
/// Required designer variable.
///
private System.ComponentModel.IContainer components = null;
///
/// Clean up any resources being used.
///
/// true if managed resources should be disposed; otherwise, false.
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
// Windows Form Designer generated code
private void InitializeLanguageText()
{
this.groupBox1.Text = PdnResources.GetString("Menu.operation.text");
this.btnPlay.Text = PdnResources.GetString("Menu.imagecapture.Videorecording.Play.text");
this.btnStop.Text = PdnResources.GetString("Menu.stop.text");
this.btnStart.Text = PdnResources.GetString("Menu.Started.text");
this.groupBox2.Text = PdnResources.GetString("Menu.Setting.Text");
this.rdoM.Text = PdnResources.GetString("Menu.millisecond.text");
this.rdoS.Text = PdnResources.GetString("Menu.second.text");
this.btnSavePath.Text = PdnResources.GetString("Menu.alter.text");
this.label4.Text = PdnResources.GetString("Menu.imagecapture.Videorecording.Shootingformat.text") + ":";
this.label3.Text = PdnResources.GetString("Menu.imagecapture.Videorecording.shootingtime.text") + ":";
this.label2.Text = PdnResources.GetString("Menu.Nameprefix.text") + ":";
this.label1.Text = PdnResources.GetString("Menu.saveroute.text") + ":";
this.Text = PdnResources.GetString("Menu.imagecapture.Videorecording.Videorecording.text");
}
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.btnPlay = new System.Windows.Forms.Button();
this.btnStop = new System.Windows.Forms.Button();
this.btnStart = new System.Windows.Forms.Button();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.cmbVideoFormat = new System.Windows.Forms.ComboBox();
this.rdoM = new System.Windows.Forms.RadioButton();
this.rdoS = new System.Windows.Forms.RadioButton();
this.nudDuration = new System.Windows.Forms.NumericUpDown();
this.btnSavePath = new System.Windows.Forms.Button();
this.txtPrefix = new System.Windows.Forms.TextBox();
this.txtSavePath = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudDuration)).BeginInit();
this.SuspendLayout();
//
// groupBox1
//
this.groupBox1.Controls.Add(this.btnPlay);
this.groupBox1.Controls.Add(this.btnStop);
this.groupBox1.Controls.Add(this.btnStart);
this.groupBox1.Location = new System.Drawing.Point(12, 12);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(428, 75);
this.groupBox1.TabIndex = 0;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "操作";
//
// btnPlay
//
this.btnPlay.Enabled = false;
this.btnPlay.Location = new System.Drawing.Point(340, 26);
this.btnPlay.Name = "btnPlay";
this.btnPlay.Size = new System.Drawing.Size(68, 30);
this.btnPlay.TabIndex = 2;
this.btnPlay.Text = "播放";
this.btnPlay.UseVisualStyleBackColor = true;
this.btnPlay.Click += new System.EventHandler(this.btnPlay_Click);
//
// btnStop
//
this.btnStop.Enabled = false;
this.btnStop.Location = new System.Drawing.Point(266, 26);
this.btnStop.Name = "btnStop";
this.btnStop.Size = new System.Drawing.Size(68, 30);
this.btnStop.TabIndex = 1;
this.btnStop.Text = "停止";
this.btnStop.UseVisualStyleBackColor = true;
this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
//
// btnStart
//
this.btnStart.Location = new System.Drawing.Point(192, 26);
this.btnStart.Name = "btnStart";
this.btnStart.Size = new System.Drawing.Size(68, 30);
this.btnStart.TabIndex = 0;
this.btnStart.Text = "开始";
this.btnStart.UseVisualStyleBackColor = true;
this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
//
// groupBox2
//
this.groupBox2.Controls.Add(this.cmbVideoFormat);
this.groupBox2.Controls.Add(this.rdoM);
this.groupBox2.Controls.Add(this.rdoS);
this.groupBox2.Controls.Add(this.nudDuration);
this.groupBox2.Controls.Add(this.btnSavePath);
this.groupBox2.Controls.Add(this.txtPrefix);
this.groupBox2.Controls.Add(this.txtSavePath);
this.groupBox2.Controls.Add(this.label4);
this.groupBox2.Controls.Add(this.label3);
this.groupBox2.Controls.Add(this.label2);
this.groupBox2.Controls.Add(this.label1);
this.groupBox2.Location = new System.Drawing.Point(12, 100);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(428, 249);
this.groupBox2.TabIndex = 1;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "设置";
//
// cmbVideoFormat
//
this.cmbVideoFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbVideoFormat.FormattingEnabled = true;
this.cmbVideoFormat.Location = new System.Drawing.Point(266, 173);
this.cmbVideoFormat.Name = "cmbVideoFormat";
this.cmbVideoFormat.Size = new System.Drawing.Size(95, 20);
this.cmbVideoFormat.TabIndex = 10;
//
// rdoM
//
this.rdoM.AutoSize = true;
this.rdoM.Location = new System.Drawing.Point(324, 127);
this.rdoM.Name = "rdoM";
this.rdoM.Size = new System.Drawing.Size(47, 16);
this.rdoM.TabIndex = 9;
this.rdoM.Text = "毫秒";
this.rdoM.UseVisualStyleBackColor = true;
//
// rdoS
//
this.rdoS.AutoSize = true;
this.rdoS.Checked = true;
this.rdoS.Location = new System.Drawing.Point(260, 127);
this.rdoS.Name = "rdoS";
this.rdoS.Size = new System.Drawing.Size(35, 16);
this.rdoS.TabIndex = 8;
this.rdoS.TabStop = true;
this.rdoS.Text = "秒";
this.rdoS.UseVisualStyleBackColor = true;
//
// nudDuration
//
this.nudDuration.Location = new System.Drawing.Point(177, 125);
this.nudDuration.Maximum = new decimal(new int[] {
276447231,
23283,
0,
0});
this.nudDuration.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.nudDuration.Name = "nudDuration";
this.nudDuration.Size = new System.Drawing.Size(72, 21);
this.nudDuration.TabIndex = 7;
this.nudDuration.Value = new decimal(new int[] {
1,
0,
0,
0});
//
// btnSavePath
//
this.btnSavePath.Location = new System.Drawing.Point(367, 32);
this.btnSavePath.Name = "btnSavePath";
this.btnSavePath.Size = new System.Drawing.Size(55, 25);
this.btnSavePath.TabIndex = 6;
this.btnSavePath.Text = "更改";
this.btnSavePath.UseVisualStyleBackColor = true;
this.btnSavePath.Click += new System.EventHandler(this.btnSavePath_Click);
//
// txtPrefix
//
this.txtPrefix.Location = new System.Drawing.Point(103, 75);
this.txtPrefix.Name = "txtPrefix";
this.txtPrefix.Size = new System.Drawing.Size(258, 21);
this.txtPrefix.TabIndex = 5;
//
// txtSavePath
//
this.txtSavePath.Location = new System.Drawing.Point(103, 32);
this.txtSavePath.Name = "txtSavePath";
this.txtSavePath.ReadOnly = true;
this.txtSavePath.Size = new System.Drawing.Size(258, 21);
this.txtSavePath.TabIndex = 4;
this.txtSavePath.Text = "r";
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(15, 176);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(65, 12);
this.label4.TabIndex = 3;
this.label4.Text = "拍摄格式:";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(15, 127);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(65, 12);
this.label3.TabIndex = 2;
this.label3.Text = "拍摄时间:";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(15, 80);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(65, 12);
this.label2.TabIndex = 1;
this.label2.Text = "名称前缀:";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(15, 35);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(65, 12);
this.label1.TabIndex = 0;
this.label1.Text = "保存路径:";
//
// timer1
//
this.timer1.Enabled = true;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// CameraVideoRecording
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(459, 373);
this.Controls.Add(this.groupBox2);
this.Controls.Add(this.groupBox1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Location = new System.Drawing.Point(0, 0);
this.Name = "CameraVideoRecording";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "视频录制";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.CameraVideoRecording_FormClosing);
this.Controls.SetChildIndex(this.groupBox1, 0);
this.Controls.SetChildIndex(this.groupBox2, 0);
this.groupBox1.ResumeLayout(false);
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudDuration)).EndInit();
this.ResumeLayout(false);
}
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.Button btnPlay;
private System.Windows.Forms.Button btnStop;
private System.Windows.Forms.Button btnStart;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.ComboBox cmbVideoFormat;
private System.Windows.Forms.RadioButton rdoM;
private System.Windows.Forms.RadioButton rdoS;
private System.Windows.Forms.NumericUpDown nudDuration;
private System.Windows.Forms.Button btnSavePath;
private System.Windows.Forms.TextBox txtPrefix;
private System.Windows.Forms.TextBox txtSavePath;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label1;
#endregion
private void timer1_Tick(object sender, EventArgs e)
{
btnStart.Enabled = !_recording;
btnStop.Enabled = _recording;
btnPlay.Enabled = _done && !_recording;
if (_recording && (DateTime.Now - _timeLog).TotalMilliseconds > m_duration)
{
stopRecording();
}
}
}
}