📄 mainform.cs
字号:
private void OpenMJPEG()
{
MJPEGStream mjpegSource = new MJPEGStream();
mjpegSource.VideoSource = CameraIp;
OpenVideoSource(mjpegSource);
}
// 打开视频源
private void OpenVideoSource(IVideoSource source)
{
this.Cursor = Cursors.WaitCursor;
CloseFile();
if (detector != null)
{
detector.MotionLevelCalculation = true;
}
Camera camera = new Camera(source, detector);
camera.Start();
cameraWindow.Camera = camera;
statIndex = statReady = 0;
timer.Start();
this.Cursor = Cursors.Default;
}
private void CloseFile()
{
Camera camera = cameraWindow.Camera;
if (camera != null)
{
cameraWindow.Camera = null;
camera.SignalToStop();
camera.WaitForStop();
camera = null;
if (detector != null)
detector.Reset();
}
if (writer != null)
{
writer.Dispose();
writer = null;
}
intervalsToSave = 0;
}
private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Camera camera = cameraWindow.Camera;
if (camera != null)
{
statCount[statIndex] = camera.FramesReceived;
if (++statIndex >= statLength)
statIndex = 0;
if (statReady < statLength)
statReady++;
float fps = 0;
for (int i = 0; i < statReady; i++)
{
fps += statCount[i];
}
fps /= statReady;
statCount[statIndex] = 0;
fpsPanel.Text = fps.ToString("F2") + " fps";
}
if (intervalsToSave > 0)
{
if ((--intervalsToSave == 0) && (writer != null))
{
writer.Dispose();
writer = null;
}
}
}
private void noneMotionItem_Click(object sender, System.EventArgs e)
{
detector = null;
detectorType = 0;
SetMotionDetector();
}
private void SetMotionDetector()
{
Camera camera = cameraWindow.Camera;
if (detector != null)
{
detector.MotionLevelCalculation = true;
}
if (camera != null)
{
camera.Lock();
camera.MotionDetector = detector;
statIndex = statReady = 0;
camera.Unlock();
}
}
private void motionItem_Popup(object sender, System.EventArgs e)
{
MenuItem[] items = new MenuItem[]
{
noneMotionItem
};
for (int i = 0; i < items.Length; i++)
{
items[i].Checked = (i == detectorType);
}
}
private void btnOpenVideo_Click(object sender, EventArgs e)
{
OpenMJPEG();
}
//读取INI
public string ReadIni(string Section, string Ident, string Default)
{
Byte[] Buffer = new Byte[65535];
int bufLen = GetPrivateProfileString(Section, Ident, Default, Buffer, Buffer.GetUpperBound(0), FileName);
string s = Encoding.GetEncoding(0).GetString(Buffer);
s = s.Substring(0, bufLen);
return s.Trim();
}
private void GetIni()
{
CameraIp = ReadIni("VideoUrl", "videoUrl", "");
ControlIp = ReadIni("ControlUrl", "controlUrl", "");
Port = ReadIni("Port", "port", "");
CMD_Forward = ReadIni("Forward", "forward", "");
CMD_Backward = ReadIni("Backward", "backward", "");
CMD_TurnLeft = ReadIni("Left", "left", "");
CMD_TurnRight = ReadIni("Right", "right", "");
CMD_Stop = ReadIni("Stop", "stop", "");
CMD_EngineUp = ReadIni("GearUp", "gearUp", "");
CMD_EngineDown = ReadIni("GearDown", "gearDown", "");
btCom = ReadIni("BTCOM", "btcom", "");
btBaudrate = ReadIni("BTBaudrate", "btbaudrate", "");
}
private void SYSConfig_Click(object sender, EventArgs e)
{
Config config = new Config();
config.ShowDialog();
}
private void panel_Paint(object sender, PaintEventArgs e)
{
}
private void MainForm_Load(object sender, EventArgs e)
{
GetIni();
}
private void menuItem5_Click(object sender, EventArgs e)
{
InitWIFI(ControlIp, Port);//初始化WIFI
}
private void menuItem6_Click(object sender, EventArgs e)
{
//开启蓝牙模式
controlType = 1;
}
//初始化WIFI
public void InitWIFI(string controlIp, string port)
{
controlType = 0;
this.menuItem5.Checked = true;
}
private bool send_flag = true;
private void buttonForward_Click(object sender, EventArgs e)
{
if (send_flag)
{
send_flag = false;
if (controlType == 0)
{
Thread t;
t = new Thread(delegate()
{
RobotEngine.SendDataInSocket(CMD_Forward, ControlIp, Port);
});
t.Start();
}
else if (controlType == 1)
{
RobotEngine.SendDataInComm(comm, CMD_Forward);
}
else
{
MessageBox.Show("请先选择一种控制方式!", "控制发送提示!");
}
}
}
private void buttonLeft_Click(object sender, EventArgs e)
{
if (send_flag)
{
send_flag = false;
if (controlType == 0)
{
Thread t;
t = new Thread(delegate()
{
RobotEngine.SendDataInSocket(CMD_TurnLeft, ControlIp, Port);
});
t.Start();
}
else if (controlType == 1)
{
RobotEngine.SendDataInComm(comm, CMD_TurnLeft);
}
else
{
MessageBox.Show("请先选择一种控制方式!", "控制发送提示!");
}
}
}
private void buttonRight_Click(object sender, EventArgs e)
{
if (send_flag)
{
send_flag = false;
if (controlType == 0)
{
Thread t;
t = new Thread(delegate()
{
RobotEngine.SendDataInSocket(CMD_TurnRight, ControlIp, Port);
});
t.Start();
}
else if (controlType == 1)
{
RobotEngine.SendDataInComm(comm, CMD_TurnRight);
}
else
{
MessageBox.Show("请先选择一种控制方式!", "控制发送提示!");
}
}
}
private void buttonBackward_Click(object sender, EventArgs e)
{
if (send_flag)
{
send_flag = false;
if (controlType == 0)
{
Thread t;
t = new Thread(delegate()
{
RobotEngine.SendDataInSocket(CMD_Backward, ControlIp, Port);
});
t.Start();
}
else if (controlType == 1)
{
RobotEngine.SendDataInComm(comm, CMD_Backward);
}
else
{
MessageBox.Show("请先选择一种控制方式!", "控制发送提示!");
}
}
}
private void buttonStop_Click(object sender, EventArgs e)
{
send_flag = true;
if (controlType == 0)
{
Thread t;
t = new Thread(delegate()
{
RobotEngine.SendDataInSocket(CMD_Stop, ControlIp, Port);
});
t.Start();
}
else if (controlType == 1)
{
RobotEngine.SendDataInComm(comm, CMD_Stop);
}
else
{
MessageBox.Show("请先选择一种控制方式!", "控制发送提示!");
}
}
private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
{
Process.GetCurrentProcess().Kill();
}
private void MainForm_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.W)
{
buttonForward.PerformClick();
}
else if (e.KeyCode == Keys.S)
{
buttonBackward.PerformClick();
}
else if (e.KeyCode == Keys.A)
{
buttonLeft.PerformClick();
}
else if (e.KeyCode == Keys.D)
{
buttonRight.PerformClick();
}
}
private void MainForm_KeyUp(object sender, KeyEventArgs e)
{
buttonStop.PerformClick();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -