diff --git a/ISCamRecorder/CvCamera.cs b/ISCamRecorder/CvCamera.cs index 3c27110..4bec7e0 100644 --- a/ISCamRecorder/CvCamera.cs +++ b/ISCamRecorder/CvCamera.cs @@ -8,6 +8,7 @@ using System.Drawing; using System.Diagnostics; using System.IO; +using System.Windows.Forms; namespace ISCamRecorder { @@ -38,6 +39,16 @@ bool _Recoding = false; // 録画中フラグ List _RecFrames = new List(); // 録画画像 float _RecFrameRate = 0; // 録画フレームレート + MainForm _MainForm = null; // メインフォーム + + + /// + /// コンストラクタ + /// + /// メインフォーム + public CvCamera(MainForm mf) { + _MainForm = mf; + } /// /// カメラ接続 @@ -48,6 +59,8 @@ if (!camera.IsOpened()) { camera.Dispose(); camera = null; + MessageBox.Show("追加カメラに接続できません", "Error", + MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } camera.FrameWidth = frameWidth; @@ -62,12 +75,21 @@ // 撮影ループ while (!_ExitSignal) { using (var frame = new Mat()) { + // 撮影 camera.Read(frame); + _Buffer[_WriteBufferID] = BitmapConverter.ToBitmap(frame); if (_Recoding) { _RecFrames.Add(new FrameInfo(frame.Clone())); } - _Buffer[_WriteBufferID] = BitmapConverter.ToBitmap(frame); _WriteBufferID = 1 - _WriteBufferID; // バッファ切り替え + + // 表示 + if (!_ExitSignal) { + _MainForm.CvCameraPic.Invoke((MethodInvoker)delegate { + _MainForm.CvCameraPic.Image = _Buffer[1 - _WriteBufferID]; + }); + } + _Fps.Shot(); } } diff --git a/ISCamRecorder/MainForm.Designer.cs b/ISCamRecorder/MainForm.Designer.cs index 242f13a..b745b99 100644 --- a/ISCamRecorder/MainForm.Designer.cs +++ b/ISCamRecorder/MainForm.Designer.cs @@ -240,8 +240,6 @@ chartArea1.AxisX.LabelStyle.Format = "HH:mm:ss"; chartArea1.AxisX.MajorGrid.LineColor = System.Drawing.Color.Gray; chartArea1.AxisY.MajorGrid.LineColor = System.Drawing.Color.Gray; - chartArea1.AxisY.Maximum = 800D; - chartArea1.AxisY.Minimum = 500D; chartArea1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192))))); chartArea1.Name = "ChartArea1"; chartArea1.Position.Auto = false; diff --git a/ISCamRecorder/MainForm.cs b/ISCamRecorder/MainForm.cs index e92d7ff..fdb2723 100644 --- a/ISCamRecorder/MainForm.cs +++ b/ISCamRecorder/MainForm.cs @@ -27,9 +27,9 @@ private System.Threading.Timer _UITimer; // UI更新タイマー private System.Threading.Timer _GUITimer; // UI更新タイマー - List _Cameras = new List (); // カメラオブジェクト - SensorData _Sensor; // センサーオブジェクト - CvCamera _CvCamera = new CvCamera (); + List _Cameras = new List (); // ISカメラオブジェクト + SensorData _Sensor; // センサーオブジェクト + CvCamera _CvCamera; // Cvカメラオブジェクト bool _ExitSignal = false; // ソフトウェア終了シグナル Task _TriggerThread; // トリガースレッド Task _SerialThread; // シリアル通信スレッド @@ -39,6 +39,7 @@ private ulong _availablePhysicalMemory; //合計物理メモリ DateTime _LastUpdate; // 前回のUI更新時間 public Chart SensorChart { get { return chart1; } } + public PictureBox CvCameraPic { get { return PicCvCamera; } } /// /// コンストラクタ @@ -47,6 +48,7 @@ MediaFoundationApi.Startup(); InitializeComponent(); _Sensor = new SensorData(this); + _CvCamera = new CvCamera(this); } /// @@ -106,20 +108,6 @@ _Sensor.Loop(); } - /// - /// グラフをプロット - /// - private void Plot() { - //if (_Sensor.Values.Count < 1) return; - //chart1.Series[0].Points.Clear(); - //lock (SensorData.Locker) { - // chart1.Series[0].Points.DataBindXY(_Sensor.Times, _Sensor.Values); - // //var minValue = _Sensor.Values.Min(); - // //chart1.ChartAreas[0].AxisY.Minimum = - // // minValue < PLOT_YAXIS_MIN ? minValue : PLOT_YAXIS_MIN; - //} - } - void EndRecoding() { if (_RecodingThread != null && _RecodingThread.IsCompleted) { _RecodingThread.Dispose(); @@ -164,8 +152,7 @@ MemoryToUse(); _TriggerFrameRate = float.Parse(TxtTriggerFPS.Text); } - //Plot(); - PicCvCamera.Image = _CvCamera.GetImage(); // 追加カメラ表示 + //PicCvCamera.Image = _CvCamera.GetImage(); // 追加カメラ表示 if (ChkStartSW.Checked && _Sensor.IsStartButtonPressed) StartRecoding(); } diff --git a/ISCamRecorder/SensorData.cs b/ISCamRecorder/SensorData.cs index 5957b73..2281ae8 100644 --- a/ISCamRecorder/SensorData.cs +++ b/ISCamRecorder/SensorData.cs @@ -54,13 +54,13 @@ // シリアルポート接続 var portname = GetSerialPort(); if (portname.Length < 1) { - //MessageBox.Show("シリアルデバイスに接続できません", "Error", - // MessageBoxButtons.OK, MessageBoxIcon.Warning); + MessageBox.Show("シリアルデバイスに接続できません", "Error", + MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } _Serial = new SerialPort { PortName = portname, - BaudRate = 9600, + BaudRate = 115200, DataBits = 8, Parity = Parity.None, StopBits = StopBits.One, @@ -89,11 +89,10 @@ // データ受信 var str = _Serial.ReadLine(); var values = str.Split(','); - if (values.Length < 2) continue; - Debug.WriteLine("cp1"); + if (values.Length < 5) continue; // 受信データ解析 - _StartButtonState = values[0].Equals("0"); + _StartButtonState = values[4].Equals("0"); var photoSensor = int.Parse(values[1]); var dt = DateTime.Now; var elapsed = (dt - _RecordBeginTime).TotalMilliseconds; @@ -109,7 +108,6 @@ $"{dt.ToString("yyyy/MM/dd,HH:mm:ss.fff")},{elapsed:0.00},{photoSensor}"); } } - Debug.WriteLine("cp2"); // データ追加 Values.Enqueue(photoSensor); @@ -118,25 +116,18 @@ Values.Dequeue(); Times.Dequeue(); } - Debug.WriteLine("cp3"); // 表示 if (!_ExitSignal) { - Debug.WriteLine("cp3a"); _MainForm.SensorChart.Invoke((MethodInvoker)delegate { - Debug.WriteLine("cp3b"); _MainForm.SensorChart.Series[0].Points.Clear(); - Debug.WriteLine("cp3c"); _MainForm.SensorChart.Series[0].Points.DataBindXY(Times, Values); - Debug.WriteLine("cp3d"); }); } - Debug.WriteLine("cp4"); _Fps.Shot(); } - Debug.WriteLine("break"); _Serial?.Close(); _Serial = null; } @@ -146,7 +137,6 @@ /// public void Stop() { _ExitSignal = true; - Debug.WriteLine("stop"); } ///