C#メモ

Dispose

[雑記] Dispose にまつわる余談

【 @ 】

verbatim文字列

 最後に、ファイルのパスなどを記述するときに便利な文字列を紹介しておく。これは文字列定数の前に“@(アットマーク)”を付けたもので、「verbatim文字列」と呼ばれる文字列である(「verbatim」は「一字一句変えずに」という意味。“バーベイタム”と発音するらしいが、難しいのでよく英語のまま表記されている)。verbatim文字列の中では、通常の文字列で使用される「\n」、「\t」などのエスケープ・シーケンスが処理されない。このためパスの区切りを示す「\」をそのまま文字列中に記述することできる。

参考:文字列処理に関するヒント

【 $ 】

参考:C#で{0}を使って文字列に変数を埋め込む方法|文字列の結合方法など紹介

PictruBox

表示した画像をディスプレイ枠外まで移動させ、ディスプレイ内に戻すと画像が消える

参考:PictureBox上で消える画像&描画・消えない画像&描画

                Bitmap viewBitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(matMat);
#if DEBUG
                viewBitmap.Save(Const.Constants.WorkDir + @"\SlamViewWait.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
#endif
                this.pctBoxSetting.Image = viewBitmap;
                Graphics graphics = Graphics.FromImage(this.pctBoxSetting.Image);
                graphics.DrawImage(viewBitmap, 0, 0, this.pctBoxSetting.Width, this.pctBoxSetting.Height);
                matMat.Dispose();


                /* 表示している画像のウィンドウをディスプレイ表示枠の外に移動し、戻すと画像が消える
                Graphics graphics = this.pctBoxSetting.CreateGraphics();
                graphics.DrawImage(viewBitmap, 0, 0, this.pctBoxSetting.Width, this.pctBoxSetting.Height);
                matMat.Dispose();
                */
                /* ファイルを開き画像を表示中に、そのファイルに保存しようとするとロックが掛かりエラーが発生する
                Debug.WriteLine("PictureBox SizeMode=" + this.pctBoxSetting.SizeMode);
                //画像の大きさをPictureBoxに自動修正
                this.pctBoxSetting.SizeMode = PictureBoxSizeMode.StretchImage;
                //画像を表示する
                this.pctBoxSetting.Image = System.Drawing.Image.FromFile(Const.Constants.WorkDir + @"\SlamViewWait.jpg");
                Debug.WriteLine("PictureBox SizeMode=" + this.pctBoxSetting.SizeMode);
                */

C# Serial Port .NET Core(.NET5.0)から

.NET5.0からなのか? ツールボックスにSerialPortが存在しない

SerialPort

DataReceivedHandler

Arduino

Serial.begin(9600, SERIAL_7E1)のように2つ目のパラメータでデータ長、パリティの有無、ストップビットを設定することができます。デフォルトは8bit、パリティなし、1ストップビット(SERIAL_8N1)です。詳しい設定方法についてはIDE付属のリファレンスを参照してください。

参考

Com Sirial Port

Arduino→VisualStudioでシリアルを受信しよう☆【Arduino / Visual Studio】

PC→Arduinoへシリアル通信しよう【Arduino / Visual Studio】

.NET Frameworkシリアルポート 非同期

Arduinoと.NET Coreでのプログラミング

C#フォームプログラムでのシリアル通信の仕方

【C#】シリアル通信(SerialPort)の使用方法を紹介!

C#で、シリアル通信をする

Dispatcher.Invoke

【C#】非同期処理の簡単な使い方【Task/async/await】

C#で別スレッドからコントロールを操作する (Dispatcher.Invoke)

SLAM

画像とビデオの読み込みと書き込み

ファイル形式診断ツール

image/x-portable-graymap

このファイル形式はimage/x-portable-graymapです。

想定される拡張子

pgm

var pgm = new PGM(); プログラムサンプル

画像bmpをpgmに変換するには?

C#(C Sharp)を使用したPGM(Portable Graphics Media)画像ファイルの読み取り/書き込み

ユニバーサルWindowsアプリ(c#、XAML)でのポータブルグレイマップ(PGM)画像の表

PNM と ImageMagick で画像ファイルを手作り生成

画像ファイルの読み書き

(C言語)PNM (PPM / PGM / PBM) 画像の読み込み

【C#】画像ファイルを開く

C#】画像(Bitmapクラス)のPictureBoxへの描画

C# DXF

重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
警告 NU1701 パッケージ ‘netDXF 2.2.0.1’ はプロジェクトのターゲット フレームワーク ‘net6.0-windows7.0’ ではなく ‘.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8’ を使用して復元されました。このパッケージは、使用しているプロジェクトとの完全な互換性がない可能性があります。

C# OpenCV

.NET(VB.NET,C#,C++・CLI)からOpenCVを使う方法

  • .NETのラッパーライブラリを使う
  • 自作でラッパーライブラリを作成する
  • C++/CLIから直接使う

現時点(2022/06/24)ではOpenCvSharpが妥当かな~??

http://code.google.com/p/opencvsharp/

OpenCvSharpインストール

「メニュー」-「プロジェクト」-「NuGetパッケージの管理」

参照を選択し「OpenCvSharp」と入力する

インストール対象として、「OpenCvSharp4」「OpenCvSharp4.runtime.win」「OpenCvSharp4.Windows」が存在しますが、今回は「OpenCvSharp4.Windows」のみをインストールします。全てインストールしてもOKです。

インストール後に依存関係のパッケージを見ると、OpenCvSharpがインストールされている事が判ります。

参考

C#(.NET)からOpenCVを使う方法、OpenCvSharpのインストール方法

パッケージ機能など

OpenCvSharp4.windows

OpenCvSharp4.Extensions

OpenCvSharp4.runtime.win

OpenCvSharp4関連リンク

GitHub

C# プロジェクト作成

プロジェクト新規作成時何を選ぶべきか?

3つの違いを区別

呼称GUIFramework構造描画技術
1Windowsフォームアプリケーション (.NET Framework)WinForms.NET Frameworkロジック埋込GDI
GDI+
2WindowsフォームアプリWinForms.NET Core
.NET 5.0~
ロジック埋込GDI
GDI+
3WPFアプリケーションWPF.NET Core
.NET 5.0~
ロジック分離Direct3D

Windowsフォームアプリケーション (.NET Framework)

.NET Framework 4.8までしか選択できない。古いバージョンを作る時に使う。

Windowsフォームアプリ

GUIは従来通りにWinFormsを採用なら、こちらを選ぶ

WPFアプリケーション

参考

何が同じで、何が違うのか? – Windowsフォームアプリケーション、Windowsフォームアプリ、そしてWPFアプリケーション