diff --git a/TIASshot/Cameras/CameraBase.cs b/TIASshot/Cameras/CameraBase.cs
index 17f0c56..c543cde 100644
--- a/TIASshot/Cameras/CameraBase.cs
+++ b/TIASshot/Cameras/CameraBase.cs
@@ -56,8 +56,8 @@
public CameraBase(Form1 form) {
_form = form;
UpdateRate = Config.GetFloat("Calib/UpdateRate");
- var tccSrgb = LoadMatFromCsv(Config.GetString("File/TccSrgbRef"));
- var tccXyz = LoadMatFromCsv(Config.GetString("File/TccXyzRef"));
+ var tccSrgb = IoUtil.LoadMatFromCsv(Config.GetString("File/TccSrgbRef"));
+ var tccXyz = IoUtil.LoadMatFromCsv(Config.GetString("File/TccXyzRef"));
_colorCorrector = new ColorCorrector(tccSrgb, tccXyz);
_chartDetector = new ChartDetector(_form.ShowMessage);
}
@@ -91,7 +91,7 @@
SetInfo("データ名", _form.GetDataName());
SetInfo("撮影枚数", "1");
Shot();
- EventSound(Config.GetString("Sound/OneShotDone"));
+ IoUtil.PlaySound(Config.GetString("Sound/OneShotDone"));
_form.ShowMessage("撮影終了");
}
@@ -104,7 +104,7 @@
SetInfo("撮影枚数", $"{_form.GetNumMultiShots()}");
SetInfo("撮影間隔(ms)", $"{_form.GetMultiShotsInterval()}");
Shot(_form.GetNumMultiShots(), _form.GetMultiShotsInterval());
- EventSound(Config.GetString("Sound/MultiShotDone"));
+ IoUtil.PlaySound(Config.GetString("Sound/MultiShotDone"));
_form.ShowMessage("撮影終了");
}
@@ -189,9 +189,9 @@
Cv2.ImWrite(Path.Combine(_saveFolder, Config.GetString("File/TccRoisImage")), imgRois);
// 変換行列の計算・保存は ColorCorrector に委譲する
- _colorCorrector.CalcTcc(tccRgb, _saveFolder, SaveMatToCsv);
+ _colorCorrector.CalcTcc(tccRgb, _saveFolder, IoUtil.SaveMatToCsv);
- EventSound(Config.GetString("Sound/CalibDone"));
+ IoUtil.PlaySound(Config.GetString("Sound/CalibDone"));
_form.ShowMessage("自動校正完了");
_form.EnableShots();
_calibrated = true;
@@ -238,69 +238,11 @@
}
///
- /// csvファイルからMatを読み込む
- ///
- ///
- ///
- ///
- private Mat LoadMatFromCsv(string csvFile) {
- try {
- var arr = new List();
- int cols = -1;
- using (var reader = new StreamReader(csvFile)) {
- while (!reader.EndOfStream) {
- var line = reader.ReadLine();
- var valStrs = line.Split(',');
- if (cols == -1) cols = valStrs.Length;
- else if (cols != valStrs.Length) throw new Exception("cols != valStrs.Length");
- var vals = valStrs.Select(x => double.Parse(x)).ToArray();
- arr.Add(vals);
- }
- }
- var m = new Mat(arr.Count, cols, MatType.CV_64FC1);
- for (var row = 0; row < arr.Count; row++) {
- for (var col = 0; col < cols; col++) {
- m.At(row, col) = arr[row][col];
- }
- }
- return m;
- } catch (Exception) {
- return null;
- }
- }
-
- ///
- /// Matをcsvファイルに保存
- ///
- ///
- ///
- private void SaveMatToCsv(string csvFile, Mat m) {
- using (var writer = new StreamWriter(csvFile)) {
- for (var row = 0; row < m.Rows; row++) {
- var line = "";
- for (var col = 0; col < m.Cols; col++) {
- if (col > 0) line += ",";
- line += $"{m.At(row, col):0.0000000}";
- }
- writer.WriteLine(line);
- }
- }
- }
-
- ///
/// 保存フォルダの取得
///
- ///
- ///
+ ///
protected void SetSaveFolder(string note) {
- var dt = DateTime.Now;
- var paths = new List() {
- Config.GetString("File/SaveFolder"),
- dt.ToString("yyyy-MM-dd"),
- dt.ToString("HH_mm_ss") + $"-{note}",
- };
- _saveFolder = Path.Combine(paths.ToArray());
- Directory.CreateDirectory(_saveFolder);
+ _saveFolder = IoUtil.CreateSaveFolder(note);
}
///
@@ -321,24 +263,7 @@
///
///
protected void WriteInfo(StreamWriter sw) {
- sw.WriteLine($"撮影日時,{DateTime.Now:yyyy/MM/dd HH:mm:ss}"); // 撮影日時を追加
- foreach (var kvp in _ShotInfo) {
- sw.WriteLine($"{kvp.Key},{kvp.Value}");
- }
- }
-
- private void EventSound(string wavfile) {
- if (!File.Exists(wavfile)) {
- Debug.WriteLine($"音声ファイルが見つかりません: {wavfile}");
- return;
- }
- try {
- using (var player = new SoundPlayer(wavfile)) {
- player.Play();
- }
- } catch (Exception ex) {
- Debug.WriteLine($"音声再生に失敗しました: {ex.Message}");
- }
+ IoUtil.WriteInfo(sw, _ShotInfo);
}
}
}
diff --git a/TIASshot/TIASshot.csproj b/TIASshot/TIASshot.csproj
index 3da5606..17d62b6 100644
--- a/TIASshot/TIASshot.csproj
+++ b/TIASshot/TIASshot.csproj
@@ -1,4 +1,4 @@
-
+
@@ -122,6 +122,7 @@
+
Form
diff --git a/TIASshot/Utils/IoUtil.cs b/TIASshot/Utils/IoUtil.cs
new file mode 100644
index 0000000..0d7c41e
--- /dev/null
+++ b/TIASshot/Utils/IoUtil.cs
@@ -0,0 +1,113 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Media;
+using OpenCvSharp;
+
+namespace TIASshot {
+ ///
+ /// ファイル I/O(CSV 読み書き・保存フォルダ生成・撮影情報出力)とサウンド再生の
+ /// ユーティリティ.CameraBase から委譲される.状態を持たない.
+ ///
+ internal static class IoUtil {
+
+ ///
+ /// csvファイルからMatを読み込む
+ ///
+ ///
+ ///
+ ///
+ public static Mat LoadMatFromCsv(string csvFile) {
+ try {
+ var arr = new List();
+ int cols = -1;
+ using (var reader = new StreamReader(csvFile)) {
+ while (!reader.EndOfStream) {
+ var line = reader.ReadLine();
+ var valStrs = line.Split(',');
+ if (cols == -1) cols = valStrs.Length;
+ else if (cols != valStrs.Length) throw new Exception("cols != valStrs.Length");
+ var vals = valStrs.Select(x => double.Parse(x)).ToArray();
+ arr.Add(vals);
+ }
+ }
+ var m = new Mat(arr.Count, cols, MatType.CV_64FC1);
+ for (var row = 0; row < arr.Count; row++) {
+ for (var col = 0; col < cols; col++) {
+ m.At(row, col) = arr[row][col];
+ }
+ }
+ return m;
+ } catch (Exception) {
+ return null;
+ }
+ }
+
+ ///
+ /// Matをcsvファイルに保存
+ ///
+ ///
+ ///
+ public static void SaveMatToCsv(string csvFile, Mat m) {
+ using (var writer = new StreamWriter(csvFile)) {
+ for (var row = 0; row < m.Rows; row++) {
+ var line = "";
+ for (var col = 0; col < m.Cols; col++) {
+ if (col > 0) line += ",";
+ line += $"{m.At(row, col):0.0000000}";
+ }
+ writer.WriteLine(line);
+ }
+ }
+ }
+
+ ///
+ /// 保存フォルダを生成し,そのパスを返す
+ ///
+ ///
+ /// 生成した保存フォルダのパス
+ public static string CreateSaveFolder(string note) {
+ var dt = DateTime.Now;
+ var paths = new List() {
+ Config.GetString("File/SaveFolder"),
+ dt.ToString("yyyy-MM-dd"),
+ dt.ToString("HH_mm_ss") + $"-{note}",
+ };
+ var saveFolder = Path.Combine(paths.ToArray());
+ Directory.CreateDirectory(saveFolder);
+ return saveFolder;
+ }
+
+ ///
+ /// 設定値をCSVファイルに書き込む
+ ///
+ ///
+ ///
+ public static void WriteInfo(StreamWriter sw, Dictionary info) {
+ sw.WriteLine($"撮影日時,{DateTime.Now:yyyy/MM/dd HH:mm:ss}"); // 撮影日時を追加
+ foreach (var kvp in info) {
+ sw.WriteLine($"{kvp.Key},{kvp.Value}");
+ }
+ }
+
+ ///
+ /// 効果音を再生する
+ ///
+ ///
+ public static void PlaySound(string wavfile) {
+ if (!File.Exists(wavfile)) {
+ Debug.WriteLine($"音声ファイルが見つかりません: {wavfile}");
+ return;
+ }
+ try {
+ using (var player = new SoundPlayer(wavfile)) {
+ player.Play();
+ }
+ } catch (Exception ex) {
+ Debug.WriteLine($"音声再生に失敗しました: {ex.Message}");
+ }
+ }
+ }
+}