旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

C#

【C#】ソート時のインデックスが欲しい

C#

C#でソートを行い、ソートした時のインデックスも欲しい時に以下で取得できることが分かったのでメモします。 var list = new List<int>() { 3, 2, 1 }; var sorted = list.Select((x, i) => new KeyValuePair<int,int>(x, i)) .OrderBy(x => x.Key); foreach (KeyValuePair<int,int></int,int></int,int></int>…

【WPF】画像が小さい場合はそのままのサイズで表示して、大きい場合は縮小して表示したい

Imageコントロールに画像を貼り付けると大きい画像、小さい画像共に特定のサイズで表示されるのですが、表題のように表示したいと思っていたところ、そのようなプロパティがあることが分かったのでメモします。 Image1.StretchDirection = StretchDirection.…

【C#】【Python】Pythonのprint文出力をC#側に表示したい

Processで起動したPythonプログラムの中で使っているprint文の内容をC#側に表示したいと考えました。 方法は以下の記事に書かれているようにProcessクラスのBeginOutputReadLineで可能です。 zawapro.com ただ問題はprint文の結果がC#側にリアルタイムで表示…

【C#】DispatcherTimerを即起動させる

C#

10秒毎に○○したいという時DispatcherTimerを使うわけですが、Startメソッドを呼んで 10秒経ってからイベントが開始されます。そうではなくて、Startメソッドを呼んだ時に イベント開始となってほしかったのですが、以下のやり方でOKです。 // Intervalを0に…

【C#】ToList()の挙動についての勘違い

C#

ToList()が思ってた動作と違ったのでメモしておきます。 ↓のようなクラスを作ります。 class MyClass { public MyClass() { var random = new Random(); Value = random.Next(100); } public int Value { get; set; } } 上記クラスを使って以下のようなコー…

【C#】System.IO.Compression.ZipFileクラスのCreateFromDirectoryメソッドはデフォルト設定だと日本語フォルダ名に非対応

C#

アプリケーションでエラーが起きたら必要なログを全てフォルダに集めて、そのフォルダをzip化するということを やろうとしたら、フォルダ名に日本語が入っていると文字化けすることが分かりました。 解決策は以下に書かれていて、encodingにEncoding.GetEnco…

【WPF】回転中心を指定してコントロールを90度回転させたい

画面に表示させる画像を90度回転させて表示したいことがあったのですが、普通にRotateTransformを指定すると、コントロールの左上を回転中心として回転してしまいました。コントロールの中心を回転中心としたかったのですが、以下のようにRenderTransformOri…

【WPF】DataGridのScrollバーをトップへ移動させる

DataGridに大量のデータを表示します。その時画面にデータ全てを表示できないのでスクロールバーを使ってデータを閲覧します。この状態であるイベントを起こした時に下の方に移動したスクロールバーをトップに持って行きたいという状況。これは以下の方法で…

【C#】byte*をbyte[]に変換する

C++のDLLからJPEGにエンコードされた画像データ(型はunsinged charのポインタ)が送られてくるので、それをC#側でbyteポインタで受け取りbyte[]に変換後、OpenCvSharpのMatに変換したかった話です。byteポインタをbyte配列に変換するにはMarshal.Copyを利用…

【C#】エンコードされたbyte配列をMatに変換する

C++のDLLからJPEGにエンコードされた画像データ(型はunsinged charのポインタ)が送られてくるので、それをC#側でbyteポインタで受け取りbyte[]に変換後、OpenCvSharpのMatに変換したかった話です。調べてみるとOpenCvSharpにはImDecodeというメソッドがあ…

【統計】母欠点数に関する検定

ある製品を検査すると従来N個の欠点が見つかっていた。この対策が行われ、効果を検証するため製品をM個ピックアップしたところ、L個の欠点が見つかった。さて、欠点は減ったと言えるかどうか、というお題があって書籍「入門統計解析法」で調べると226ページ…

【C#】TimeSpanに割り算を適用する方法

C#

複数のTimeSpanの平均値を求めたかったため、TimeSpanに割り算を適用する方法を調べたのですが、以下のやり方で出来ることが分かりました。 // 60秒 var t1 = new TimeSpan(0, 0, 60); // Ticksに割り算を適用してTimeSpanのコンストラクタに入れる var t2 =…

【C#】動的にChartを追加する

円グラフを描きたいけれども、アプリを動作させてからでないと何個の円グラフを描くか決めれない状況のため、動的にChartを追加する方法を調べました。グラフを描くために使ったライブラリはLiveCharts.Wpfになります。 まずはxamlです。以下で定義したStack…

【C#】リストから指定した値に一番近い値を持つインデックスを取得する

C#

例えば以下のようなことがやりたく、普段for文を回してサーチしていました。 var list = new List<double>() { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 }; double value = 3.1; int index = FindClosestIndex(list, value); // 3.1に一番近い値は3.0。3.0のインデックスは2な</double>…

【C#】Windows7で日本語音声合成する

C#

音声合成はSystem.Speech.SynthesisのSpeechSynthesizerクラスを使えば良いのですが、Windows7ではデフォルトで日本語対応しておらず、対応させるには非常に面倒そうでした。 結局ここに書いてあるように、Windows7ではSpeechLibを使うのが楽だと思います。 …

【WPF】 PNG ⇔ BitmapSourceの変換

ここ(方法: PNG イメージをエンコードおよびデコードする)で調べました。 PNG ⇒ BitmapSource using System.IO; using System.Windows.Media.Imaging; public BitmapSource ReadPng(string pngPath) { var stream = new FileStream(pngPath, FileMode.Open…

【WPF】 StackPanelにアイテムを追加した時に自動でスクロールさせる

ScrollViewer内のStackPanelに画像を次々追加した時、何もしないとスクロールは一番上にありますが、これを こんな感じに自動でスクロールを一番下に持っていって欲しいという状況でした。 これを実現する方法は簡単で、画像を動的に追加した時にScrollViewe…

【WPF】 バインドした数値の表示する桁数を指定したい

TextBoxに表示する数値データを小数点一桁目までしか表示させたくなかったのですが、以下のようにStringFormatを利用することで指定可能でした(ここを参考)。 <TextBox Text="{Binding Value, StringFormat={}{0:N1}}"/></textbox>

【WPF】 矢印を描きたい

UIに矢印を描いて欲しいと言われたので、矢印を絵にしてImageに表示させようと思ったのですが、直接描くという方法もあるようです(以下リンク先参照)。 stackoverflow.com

【C#】 レジストリへの書き込み処理でUnauthorizedAccessExceptionが発生する

C#

レジストリにSetValueメソッドで書き込みを行おうとするとレジストリ自体は書き込み可能な設定なのにUnauthorizedAccessExceptionが発生しました。原因は以下の記事にあるように、レジストリを開く時に書き込み可能という事を明示しないといけなかったようで…

【C#】 JPEGの品質を変更する

OpenCVSharpのImWriteを使うことで画像を保存できますが、品質レベル(デフォルト値95)を変えたい時どうすれば良いのか調べました。 下記のようにエンコード⇒デコード⇒ImWriteという手順で良いようです。 // 画像の読み込み Mat image = Cv2.ImRead("lenna.…

【UWP】 コルタナを起動しようとすると"アクセスが拒否されました"というエラーがでる

コルタナを使うためにSpeechRecognizerのContinuousRecognitionSession.StartAsyncメソッドを呼び出すと"アクセスが拒否されました"というエラーが出ました。これはデフォルトでアプリケーションにマイクにアクセスする権限が無いことが理由のようです。 ア…

【UWP】 KeyDownイベントが発生しない

注意:UWP初心者のため正しい方法ではないかもしれません MainPage.xamlにKeyDownイベントを追加したのですが、いくらキーを押してもイベントが発生しませんでした。この問題については以下のリンクの二番目の方の方法で解決しました。 stackoverflow.com pu…

【C#】 Bスプライン曲線の実装

Bスプライン曲線を実装する必要があったので作ってみました(次数は3固定にしています)。使い方は以下の二通りを想定しています。 制御点を指定して曲線を描く 指定した点を通るような曲線を描く まずはBスプライン曲線を描くクラスをBSplineとして実装しま…

【WPF】 WindowStyle=NoneでWindowState=Maximizedにするとタスクバーが隠れる問題の対処法

タイトルの通りなんですが、WindowStyle=NoneでWindowsState=Maximizedにすると完全なフルスクリーン状態となりタスクバーも隠れてしまいます。アプリケーションによってはこれで問題無いのですが、自分の場合はタスクバーは表示させたいと思い、解決方法を…

【WPF】 拡大した画像上でクリックした座標の取得

今回やりたいことは文章だと説明が難しいのですが、下図の青丸部分をクリックするとクリックした箇所の座標はになります。 次に上図のオレンジで囲った箇所を以前ブログに書いた方法で拡大表示して下図が得られたとします(【WPF】 Imageを拡大/平行移動さ…

【WPF】 Imageを拡大/平行移動させる

表示している画像をマウスのホイールを使って拡大したり、ドラッグして平行移動させたいと思ったところ、以下の回答が評価が高かったです。 stackoverflow.com ただ、リンクの通りに実装するとTransformGroupへキャストする時にキャストエラーが出て動作させ…

【OpenCVSharp】 ヒートマップを作成する

OpenCVSharpを使ってヒートマップを描くプログラムのメモです。ヒートマップは赤⇒緑⇒青の順で遷移するため、HSV空間を使い、その後RGB空間に戻すと簡単に作成できます(OpenCVでは0が赤、60が緑、120が青に相当します)。 // 画像サイズ const int size = 10…

【WPF】 ボタンのサイズをリソースで指定する

作っているアプリケーションにボタンが沢山あるのですが、それらの幅、高さは全て共通なのでハードコーディングではなく一括管理したいと考えました。そのやり方ですが、以下の2ステップになります。 ① App.xamlに以下を追加(xmlns:sysと<sys:Double ...>の三行を追加して</sys:double>…

【WPF】 続・スクリーンショットを撮り続けて動画に保存する

以前スクリーンショットを撮り続けて動画に保存する記事を書いたのですが、実はMicrosoft Expression Encoderを使えばやりたいことは出来たようです。 ni4muraano.hatenablog.com Microsoft Expression Encoderはここからダウンロードできます。NuGetからも…