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

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

C#

【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からも…

【WPF】 BitmapSourceクラスをbitmapとして保存する

BitmapSourceクラスをbitmapとして保存する方法を探していたのですが、以下に書かれていたのでメモします。 stackoverflow.com public void SaveBitmapSourceToFile(BitmapSource bitmapSource, string filePath) { using (var fileStream = new FileStream(…

【WPF】 UIElement上のマウスイベントが発生しない

Imageの上にCanvasを置いて、CanvasにLineやEllipseをマウス操作を通じて描くことで、仮想的にImage上に絵を描いたように見えるようにしたいと思っています。 <Image .../> <Canvas .../> そこでCanvasにMouseDownイベントを付けたのですが、Canvasをクリックしても一向にMouseDownイ</canvas></image>…

【WPF】 画像ファイルをBitmapImageに読み込むと、その画像ファイルを削除できなくなるケースの対処法

Imageクラスに画像を表示するため下記のようなコードを書くと、画像ファイルを消去するときに例外が出てしまいました。 // 画像を読み込む var bmp = new BitmapImage(new Uri(filePath)); // Imageに表示する SomeImage.Source = bmp; // もう画像を表示す…

【WPF】 DataGridの一番下に表示される空白行を表示させない方法

CanUserAddRowsをfalseに設定すると空白行が表示されなくなります。

【WPF】 簡易動画プレーヤーを作成する

今回は動画のプレーヤーを作ってみます(簡易的なものですが)。調べてみるとWPFにはMediaElementというものがあって、これを使ってみると良さそうです。 まずはxamlが以下のようになります。

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

タイトルにあるようにスクリーンショットを撮り続けて動画に保存する方法のメモをします。 まずはスクリーンショットを撮る部分ですが、スクリーンショットをそのまま動画にすると容量がすごいことになるので、スクリーンショットを撮る⇒縮小するまでを作成…

【WPF】 モニターの解像度を取得する

System.Windows.PrimaryScreenWidth System.Windows.PrimaryScreenHeight で取得できます。 以下のサイトがよくまとまった情報源になります。 mseeeen.msen.jp

【WPF】 透明なウインドウの作り方

XAMLのWindowタグに下記3つを加えるだけです。作ってみると完全に透明なウインドウが作成され、ウインドウ右上部の×ボタンも消えてしまいました。そのため、例えばEscボタンを押したらWindowをCloseするような処理が必要でした。 WindowStyle=“None” Allows…

【WPF】 OxyPlotでグラフを描画する簡単な例

WPFでグラフを描きたい時はOxyPlotを利用しているのですが、頻繁に使うわけでもないため、使う度に同じことを調べる事態になってしまっています。そのため、OxyPlotの使い方に関する単純な例をメモしておきます。 1. NuGetからOxyPlot.Wpfをインストールする…

【C#】 C#からDOSコマンドでPythonスクリプトを呼び出す

C#

C#からPythonを呼び出す方法はいくつかあるようで、IronPythonを利用する方法がまずヒットしたのですが、IronPythonではサポートされていないライブラリを利用したスクリプトを呼び出したいと考えています。そのため、こちら(DOSコマンドを実行し出力データ…

【WPF】 Contentに改行付きのテキストを書く

Contentに改行を付けたくて、その方法がここ(【WPF】コントロールのContentプロパティにテキストを改行して表示する - Microsoft.NET WPF - Project Group )で分かったのでメモします。 <Button Content="Hello World&#10;\(^o^)/" IsHitTestVisible="False"/></button>

【WPF】 RadioButtonをユーザーが触れないようにする

IsHitTestVisibleとIsTabStopをFalseに設定します。IsHitTestVisibleのみをFalseにした場合、Tabキーを押してRadioButtonに移動し、スペースキーを押すとRadioButtonをチェックできてしまうため、両方Falseにする必要があります。 <RadioButton Content="ReadOnlyRadioButton" IsHitTestVisible="False" IsTabStop="False"/></radiobutton>

【OpenCvSharp】 ポインタを利用してMatクラスの画素にアクセスする

OpenCvSharpのMatクラスを走査する時、いつもAtメソッドを利用していたのですが、ポインタを使って走査する方法を見つけたのでメモします。 gist.github.com リンク先はカラー画像に対して走査していますが、自分はグレースケール画像を走査したかったので、…

【WPF】 時間のかかる処理を実行する時にアニメーションを表示する

アプリケーションで時間のかかる処理を実行している時に「今処理を実行中ですよ」とユーザーに知らせたい時、実行中に表示するアニメーションがあると便利です。幸いアニメーション自体は既に作成してくれている人がいるので、それを拝借します。 www.trilli…

【C#】 平滑化スプラインを実装する

波形に乗ったノイズを取り除く方法はいくつかあるのですが、今回は平滑化スプラインを実装します。ソースはどこかの論文に書いてあったものをC#に移植したものです。まずは平滑化スプラインを行うSplineSmoothingクラスを作成します。 public class SplineSm…

【WPF】 二次元配列をWriteableBitmapに変換する

二次元配列をWriteableBitmapに変換する方法をメモします。グレースケール画像をbyteの二次元配列で表現しており、これをImageクラスに表示するためWriteableBitmapに変換したかった、というのが動機になります。 using System.Windows.Media; using System.…

【C#】 二次元配列を一次元配列に変換する

C#

タイトルの通り二次元配列を一次元配列に変換する方法です。 using System.Linq; var array2dim = new byte[,] { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 } }; // array1dimは{0, 1, 2, 3, 4, 5, 6, 7, 8}となる byte[] array1dim = array2dim.Cast<byte>().ToArray(</byte>…

【WPF】 画像の差分を計算してWPFのImageに表示したい

タイトルの通り画像の差分を計算してWPFのImageに表示する必要があったためメモします。画像の差分を取るためにはOpenCvのC#用ラッパーであるOpenCvSharpを利用すればすぐに済むため、結局OpenCvSharpのMatクラスをWPFのImage.Sourceにどう入れるか、という…

【WPF】Ellipseの外側と内側に異なる透明度を指定する

WPFのEllipseの外側(Stroke)と内側(Fill)に異なる透明度を適用する方法をメモします。具体的には内側だけある透明度を適用したかったのですが、EllipseのOpacityを設定すると、StrokeもFillも透明になってしまいます。この問題はStrokeとFillに異なるBru…

【C#】 配列の中身ををシャッフルする

C#

using System.Linq; int[] array = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int[] shuffledArray = ary.OrderBy(i => Guid.NewGuid()).ToArray(); 参考サイト: 配列やコレクションをシャッフルする(ランダムに並び替える): .NET Tips: C#, VB.NET