JavaScript(ES6)でElm Architecture(Virtual-DOMなし)

Elm自体がJavaScriptを生成するものなので実際には利用することはないと思いますが(さらに生のJavaScriptがよければReact.jsがあります)、ElmのModelとUpdateの仕組みを生のJavaScriptで実装してみました。WPFとC#で実装されたものは、下記記事にて参照で…

WPFでElm Architecture --- Xaml利用しない版 --- 可変個のコントロール --- データによりコントロールの種類変更

下記記事にて可変個のコントロールを表示できるよう実装しました。 WPFでElm Architecture --- Xaml利用しない版 --- 可変個のコントロール - 何でもプログラミングただし、すべてのコントロールが同じで個数のみが可変であったため、今回は入力データによっ…

Throttle(一定時間リクエストがなければ実行をする)の実装

スライダーなどから大量のリクエストが送られてきたときに、全て処理する必要がない場合、一定時間リクエストがなければ最新の値で処理を行うことがあります。ReactiveExtensionにもThrottleオペレータは用意されていますので、普段はこれを利用するので問題…

WPFでElm Architecture --- Xaml利用しない版 --- 可変個のコントロール

下記記事にてXamlを利用しないElm Architectureを実装しました。 WPFでElm Architecture --- Xaml利用しない版 - 何でもプログラミングただし、固定個のコントロールにしか対応していませんでした。今回はGridなどのChildrenを動的に変更できるよう実装して…

WPFでElm Architecture --- Xaml利用しない版

下記記事にて、ViewModelまでをElm Architectureで実装し、Xamlとバインディングしてアプリケーションを作成する方法を紹介しました。 Elm Architectureを利用したMVVM --- C# WPF - 何でもプログラミング今回はXaml部分をC#側で実装したものを作成してみた…

既存のDependencyPropertyの変更を検知する

自前でDependencyPropertyを実装する場合は、Register時にPropertyMetadataを渡すことで、値の変更時にコールバックを呼び出すことが可能となります。しかし既存のDependencyPropertyの場合はすでにRegisterされているため、変更を検知するには別のアプロー…

スライダー等からの大量リクエストの、最新値のみを別スレッド処理する

C#

下記のような、スライダーの存在するアプリケーションを作成し、スライダーの値が変わる度に何かの処理をするとします。 もしこの処理が重たい場合、普通に実装しただけでは、UIのレスポンスが悪くなってしまいます。 slider.ValueChanged += (s, e) => Thre…

Functional Reactive Programming + MVVMでのUserControl --- C# WPF

下記記事にてFRPライブラリのSodiumとWPFを連携させてみました。 Functional Reactive Programming + MVVM --- C# WPF - 何でもプログラミング今回はUserControlでも利用できるよう実装してみたいと思います。 アプリケーションコード いつも通り、カウンタ…

Functional Reactive Programming + MVVM --- C# WPF

下記記事にて、Functional Reactive ProgrammingライブラリであるSodiumとWPFを連携させました(F#) SodiumでFunctional Reactive Programming (F#) --- WPF連携 - 何でもプログラミング今回は、C#にてSodiumとWPFを連携させてみたいと思います。 アプリケ…

Elm Architectureを利用したMVVMでのUserControl --- C# WPF

下記記事にて、C#でElm Architectureを利用してWPFアプリケーションを作成しました。 Elm Architectureを利用したMVVM --- C# WPF - 何でもプログラミング今回はElm ArchitectureでUserControlを実装してみたいと思います。F#版での実装は下記記事を参照して…

Elm Architectureを利用したMVVM --- C# WPF

下記記事にてF#でElm ArchitectureをWPFに導入してみました。 F#でWPF --- Elm Architectureを利用したMVVM - 何でもプログラミング今回はC#で近いものを実装してみたいと思います。F#の方ではサポートしたModel→ViewModelの変換は省略していますので、必要…

C# Immutableオブジェクト 導出項目のキャッシュ機能

C#

例として下記のようなVector2クラスを考えます。Lengthプロパティは、呼び出される毎に計算を行っています。処理が軽い場合は特に問題ありませんが、導出に時間がかかるプロパティは結果をキャッシュしてあるほうが好ましいです。今回はキャッシュを行う機能…

ImmutableオブジェクトのJSONシリアライズ、デシリアライズ(C#)

C#

今回はNewtonsoft.Jsonを利用して、Immutableオブジェクトをシリアライズ、デシリアライズしてみたいと思います。.NetにはDataContractJsonSerializerが標準で用意されていますが、DataContract、DataMember属性を付加する必要があり、動作のカスタマイズが…

ネストしたImmutableオブジェクトの更新(C#)

C#

C#(7.0)でImmutableクラスを作成する場合、下記のような記述になります。 public class Person { public int Age { get; } public string Name { get; } public Person Child { get; } public Person(int age, string name, Person child) { Age = age; Na…

WPF --- Bindingで配列をObservableCollectionに変換

現状、ItemsControlのItemsSourceに通常の配列をバインドした際、配列を新しくする度にコントロールが全て再作成されます。通常の配列の代わりにObservableCollectionをバインドすることにより、変更箇所のみViewが更新されるようになります。(要素の追加で…

F#でWPF --- Elm Architectureで実装されたUserControl

あるアプリケーションを作成した後に、それをコントロール化して更に大きなアプリケーションを作成したい時があります。今回は、下記記事で作成したカウンタアプリケーションをコントロール化してみたいと思います。 F#でWPF --- Elm Architectureを利用した…

DependencyProperty定義の記述量削減(F#)

下記記事にてC#でDependencyPropertyの記述量を削減してみました。 DependencyProperty定義の記述量削減 - 何でもプログラミング今回はF#でDependencyPropertyの記述量を削減してみたいと思います。内容はほぼAttachedPropertyの時と同じですので、下記記事…

F#でWPF --- ItemsControlのItemのCommand

作成するアプリケーション 複数の、クリック回数を表示するボタンからなるアプリケーションを作成します。追加ボタンにより、クリックできるボタンを動的に増やすことができます。 本記事ではElm Architectureを利用しますので、下記記事を参照してください…

Visual Studio 2017でプロジェクトテンプレート作成

F#でWPFプログラミングをする際、プロジェクトテンプレートにコンソールアプリケーションしか存在しないため、毎回参照設定などを追加する必要があります。今回はWPF用のプロジェクトテンプレートを作成してみたいと思います。 テンプレートの準備 まずは普…

AttachedProperty定義の記述量削減(F#)

下記記事にて、C#でAttachedPropertyの記述を削減してみました。 AttachedProperty定義の記述量削減 - 何でもプログラミング今回はF#でAttachedPropertyの記述を減らしてみたいと思います。C#版同様、プリプロセスやポストプロセスは利用しないで実装してみ…

AttachedProperty定義の記述量削減

下記記事にて、依存プロパティの定義の記述量を削減しました。 DependencyProperty定義の記述量削減 - 何でもプログラミング今回は同様に、添付プロパティの記述量を削減してみたいと思います。素のままでは下記のような記述になり、エディタ上で"propa"とタ…

LINQ独自オペレータ メモ

C#

C#のIEnumerableには、SelectやAggregateなど様々なオペレータが用意されています。本記事では、あったら便利な独自のオペレータを定義してメモしたいと思います。随時更新予定です。 ForEach なんだかんだで、やっぱりあると便利です。 public static void …

T4でImmutableクラスコンストラクタ作成(C#)

T4 C#

C#(7.0)でImmutableクラスを作成する際、下記のような記述が必要になります。 public class Person { public string Name { get; } public int Age { get; } public Person(string name, int age) { Name = name; Age = age; } } F#のレコードと異なり、コ…

DependencyProperty定義の記述量削減

独自のDependencyPropertyを定義する際、コールバックも含めると下記のような記述になります。 public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(int), typeof(Counter), new PropertyMetadata(0, (…

WPFでマウスドラッグイベント

WPFにはデフォルトでドラッグのイベントは用意されていません。今回はドラッグ用のイベントを実装してみたいと思います。記事内で利用しているObservableクラス、Disposeクラス、Subscribe関数は下記記事を参照してください。 C# eventをIObservableに変換 -…

C# eventをIObservableに変換

C#

eventからIObservableへの変換は、下記のRxのFromEvent関数にて行えます。 NuGet Gallery | Reactive Extensions (Rx) - Main Library 3.1.1今回は、Rxを導入するほどでもないとき用に、シンプルなものを自前で実装してみたいと思います。 Observer、Observa…

WPFとDirect3D11の連携 --- テクスチャ貼り付け

下記記事にて三角形を描画するところまで記述しました。 WPFとDirect3D11の連携 --- 三角形描画 - 何でもプログラミング今回はテクスチャを貼り付けて表示してみたいと思います。 Texture作成 Direct3D9側でD3DFMT_A8R8G8B8にてレンダリングターゲットを作成…

WPFとDirect3D11の連携 --- 三角形描画

下記記事にてWPFとDirect3D11を連携してサーフェスを表示しました。 WPFとDirect3D11の連携 --- 導入 - 何でもプログラミング今回は単純な三角形を描画してWPFで表示してみたいと思います。 Shader作成(csoから) csoデータが存在する場合は、下記関数のみ…

WPFとDirect3D11の連携 --- 導入

下記記事にてWPFとDirect3D9Exを連携する方法を記述しました。 WPFとDirect3D9Exの連携 --- 導入 - 何でもプログラミング最近ではDirect3D11の利用がメジャーになっていますので、今回はWPFとDirect3D11を連携させてみたいと思います。WPF自体はDirect3D9で…

WPFとDirect3D9Exの連携 --- テクスチャ貼り付け

下記記事にて三角形を描画するところまで実装しました。 WPFとDirect3D9Exの連携 --- 三角形描画 - 何でもプログラミング今回はさらにテクスチャを貼り付けを実装してみたいと思います。本記事で利用している、CreateVertexShader、CreatePixelShader、Creat…

WPFとDirect3D9Exの連携 --- 三角形描画

下記記事にてIDirect3DSurface9をWPFで表示しました。 WPFとDirect3D9Exの連携 --- 導入 - 何でもプログラミング今回は単純な三角形を描画してWPFで表示してみたいと思います。本記事で利用しているAssertHR、CliComPtr、CreateDevice、CreateRenderTargetに…

WPFとDirect3D9Exの連携 --- 導入

WPFにDirect3Dのレンダリング結果を貼り付けたい場合、D3DImageクラスが利用できます。CPU経由でBitmapSourceを作成するのに比べ、D3DImageはGPU内で完結するため、より効率的です。今回はD3DImageを利用するところまでを実装したいと思います。 C++/CLI用Co…

SSEで画像処理 --- グレースケール化

下記記事にてSSEで簡単な画像処理をしてみました。 SSEで画像処理 --- 導入 - 何でもプログラミング今回はカラー画像をグレースケール化する処理を実装してみたいと思います。入力はRGBA32bitを仮定しています。(RGB24bitの場合、48Byte毎に処理する必要が…

SSEで画像処理 --- 導入

下記記事にてアラインされたstd::vectorを作成する方法を記述しました。 アラインされたstd::vector - 何でもプログラミング今回はそれを利用して、SSEで簡単な画像処理を行ってみます。 準備 今回はintrinsicを用いて実装するため、#include します。また記…

アラインされたstd::vector

C++

SSEやAVXを利用して処理を高速化する際に、メモリ領域がアラインされている必要があります。アラインされた領域を確保するだけであれば_mm_mallocで可能ですが、_mm_freeを自分で呼ぶ必要があります。今回はstd::vectorでアラインされた領域を確保できるよう…

Bitmap読み書き

C++

下記記事にて、Windows標準ライブラリで画像を読み書きする方法を記述しました。 GDI+ --- 画像ファイル読み書き - 何でもプログラミングBitmapであれば更に何のライブラリも必要なく簡単に読み書きできます。ちょっとした画像関係の動作確認レベルの時に便…

WindowsでOpenGLES --- imgui導入

OpenGL上でGUIを実装するライブラリの一つに、ImGuiがあります。 GitHub - ocornut/imgui: Bloat-free Immediate Mode Graphical User interface for C++ with minimal dependencies数ファイル取り込むだけでGUIを実装できるため、簡単なソフトの作成には便…

WindowsでOpenGLES --- 三角形描画

下記記事にてGLFWで、OpenGLESが初期化されたウィンドウを作成しました。 WindowsでOpenGLES --- GLFW導入 - 何でもプログラミング今回はとりあえず三角形を描画してみたいと思います。 shared_ptrでリソースの管理 OpenGLではCreateとDeleteをきちんと管理…

WindowsでOpenGLES --- GLFW導入

下記の記事にてWIN32APIでOpenGLESを利用する方法を記述しました。 WindowsでOpenGLES --- ANGLE準備 - 何でもプログラミング今回は、ウィンドウの作成やOpenGLESの初期化などをクロスプラットフォームに行ってくれるライブラリ、GLFWを導入してみたいと思い…

WindowsでOpenGLES --- ANGLE準備

WindowsでOpenGLESを使いたい場合は、Google開発のANGLEが利用できます。 GitHub - google/angle: A conformant OpenGL ES implementation for Windows, Mac and Linux.ANGLEを利用すれば、OpenGLESで記述したものを、Direct3DやDesktop OpenGLでレンダリン…

Dlib --- 環境準備

DlibはC++で記述された機械学習用のライブラリです。SVMやDeep Learning等、よく聞くアルゴリズムのものは一通り準備されています。ドキュメントやサンプルが整っているのが一番嬉しい点だと思います。 Dlibダウンロード 下記サイトよりファイル一式をダウン…

GDI+ --- 画像ファイル読み書き

C++で画像ファイルを読み書きする際は、libjpegやlibpng等を利用します。しかしWindowsでは標準ライブラリでないため、ライブラリを準備する必要があります。ちょっと動作確認の時など、ライブラリの準備が面倒な時はGDI+を利用することができます。コードは…

F#でWPF --- CatmullRom曲線の描画

図形を描画する際に、指定した点を通る滑らかな曲線を描きたいことがあります。今回はCatmullRom曲線でこれを実現したいと思います。 CatmullRom曲線 2点間の補間は、更にその前後の点を利用して求められます。2点(p1、p2)と、その前後の点(p0、p3)の…

MediaFoundation --- 音声読み書き

下記記事でMediaFoundationを用いて動画の読み書きを行いました。 MediaFoundation --- 動画の読み込み - 何でもプログラミング MediaFoundation --- 動画書き出し - 何でもプログラミング今回は音声データの読み書きを行ってみたいと思います。分かりやすさ…

MediaFoundation --- 動画書き出し

下記記事にてMediaFoundationで動画を読み込む方法を調べました。 MediaFoundation --- 動画の読み込み - 何でもプログラミング今回は書き出しについて調べたいと思います。尚、見通し優先のため、エラー処理は省いてあります。 アプリケーションコード 動画…

MediaFoundation --- 動画の読み込み

下記記事にてOpenCVで動画を読み書きする方法を調べました。 OpenCVで動画読み込み&書き込み - 何でもプログラミング今回はWindows特有のMediaFoundationを利用して動画を読み込んでみます。全体の流れの把握重視の為、エラー処理は全て省いてあります。 ア…

OpenCVで動画読み込み&書き込み --- C++/CLIでラップ

下記記事にてOpenCVで動画を読み書きする方法を調べました。 OpenCVで動画読み込み&書き込み - 何でもプログラミング今回は.Netで利用できるよう、C++/CLIでラップしてみたいと思います。尚、Matクラス(Mat8UC1クラス)は下記記事のものを利用しています。 O…

OpenCVで動画読み込み&書き込み

OpenCVのダウンロードは下記記事を参照してください。 OpenCVをC++/CLIでラップ - 何でもプログラミング VideoCapture 動画を読み込むにはVideoCaptureクラスを利用します。パスを指定して開き、>>オペレータでフレームを取得します。 cv::VideoCapture capt…

F#でWPF --- BitmapImageで画像ロード

下記記事にてOpenCVと連携して画像を表示しました。画像を読み込むだけであればWPFの標準セットで可能であるため、今回はWPFで画像をロードして表示してみます。ついでにグレースケール化も行ってみます。 作成するアプリケーション ファイルダイアログで画…

F#でWPF --- OpenCV連携

下記記事にてOpenCVを.netから利用できるようC++/CLIでラップする方法を紹介しました。 OpenCVをC++/CLIでラップ - 何でもプログラミング今回はWPFと連携させて画像を表示してみたいと思います。 作成するアプリケーション ファイルダイアログで画像を選び、…