C#

GZip(Deflate)Streamで圧縮するときはCloseを忘れなく

C#

狭いスコープでusingしておくのは大事だなと再認識。 書いたコード byte[] original = File.ReadAllBytes(@"C:\Windows\explorer.exe"); var memory = new System.IO.MemoryStream(); var gzip = new System.IO.Compression.GZipStream( memory, System.IO.C…

他プロセスとのメモリのやり取り

別のプログラムを"ライブラリ"として参照できると、プログラミングは楽です。しかし何らかの理由でそうできず、別の実行ファイルとして呼び出す場合があります。そうするとすぐ直面するのが情報のやりとりをどうするかです。今回は、VirtualAllocExで作った…

System.Windows.Forms.WebBrowser あれこれ備忘録

OpenCvSharpをつかう その21(C++ API 概要)

OpenCvSharpはもともとC言語のOpenCV 1.0 APIを対象に作っておりました。以来6年経ち、C++ APIが充実し主流になってきたため、そのサポートを進めています。ある程度は仕様が固まってきたので、使い方をご紹介していこうと思います。今回は大まかな概観です…

OpenCvSharpをつかう その20(ASP.NET MVCで使う Ajax編)

その19 に少し手を加え、Ajaxによりページ遷移なしに結果画像を表示できるようにしてみます。完成形はこちらに置いてみました。自由に動かしてみてください。 http://notiz.flnet.org/CannyWebApp今回は全部がASP.NET MVCの話で、OpenCvSharpの新しい話はあ…

OpenCvSharpをつかう その19(ASP.NET MVCで使う 入門編)

OpenCVをC++ではなくC#(.NET Framework)からわざわざ利用する最大のメリットは何か。単純に言語・開発環境的な理由(書きやすいとか)を挙げる人も多いでしょうが、おそらく本質的に最も大きいのは、.NET Frameworkが持つ膨大なクラスライブラリ・周辺技術等…

OpenCvSharpをつかう その18(ラベリング・改)

この度、ラベリング機能を提供するOpenCvSharp.Blobを、P/Invokeによる実装をやめ、すべてC#(マネージドコード)で実装しなおしました。これは以下の理由からです。 ●特にCvBlobインスタンスの取り回しが悪い。リスト側のCvBlobsが解放されるとCvBlobも解放さ…

OpenCvSharpをつかう その17(NuGetで導入)

前々からの野望だったNuGetパッケージを、このたび公開しました! その1で紹介した方法よりもずっと簡単に使い始めることができるはずです。OpenCVの事前インストールも不要です。まだ作りたてほやほやなので変更されるかもしれませんが、ひとまずの使い方紹…

ImageProcessor を使う

C#

NuGetパッケージに ImageProcessor というライブラリがあります。名前は大仰なのに機能は少ないものの、純粋なC#実装で(GDI+)、簡単にちょっとした画像処理ができるので、使う場面によっては有用だと感じました。以下、ImageProcessor(1.7.1.1)の使い方の紹…

OpenCvSharpをつかう その16(SVM)

前回の記事に引き続き、SVMです。今回はOpenCvSharpからOpenCVのopencv2/ml.hpp(実装当時はopencv/ml.h)にある機械学習を使います。OpenCvSharpをつかう 記事一覧

OpenCvSharpをつかう その14(Debian wheezyで動かす)

3年ぶりの「OpenCvSharpをつかう」シリーズ再開です! OpenCvSharpをLinuxで動かすことについては、大昔に断片的に書きましたが、最後まで通しで書いてみます。記憶を頼りに書いているので、本当は詰まった箇所が抜けているかもしれません。 その1 その2 そ…

IntPtr.Add, IntPtr.Subtract

C#

いつの間にこんなメソッドが!.NET Framework 2.0ばかり使っていたので、長いこと気づきませんでした。みんなのつよーい味方、IntPtr構造体に、AddメソッドとSubtractメソッドができていました(どちらもstatic)。また、同じ機能で+と-の演算子としても定義…

Microsoft Chart Controls を使って東京電力の電力使用状況をグラフ化する

C#

.NET Framework 4から導入されたSystem.Windows.Forms.DataVisualization.Charting名前空間にあるMicrosoft Chart Controlsを使うと、簡単にグラフを作成できます。(.NET Framework 3.5でも、このページから必要なものを落としてきてインストールすれば使え…

MPOファイルのヘッダを解析しJPEGに変換する

C#

ニンテンドー3DSなどステレオ3Dカメラで撮影したMPO画像ファイルについての話の続きです。このファイルはJPEGが単純に複数枚連結したような構成になっており、先日の記事ではファイルの全バイト中からJPEGの開始数バイト(SOIなど)を探索することで切り分け…

スレッドセーフなIOの扱い

C#

マルチスレッドな処理では、複数のスレッドから1つのリソースにアクセスするときがなかなか厄介です。排他処理を行わないとタイミングによってはおかしくなってしまいます。

エンディアンを指定できるBitConverter

C#

バイト配列から任意のプリミティブ型(int, floatなど)に変換するにあたって便利なのがSystem.BitConverterクラスです。しかしこのクラスは自分の環境におけるエンディアンで処理されてしまいます。おそらく多くの環境はリトルエンディアンですが、この場合ビ…

MPOファイルをJPEGに変換する

C#

ステレオ3Dカメラ搭載のニンテンドー3DSが発売になり、これによってステレオ3Dカメラはいくらか普及するのかもしれません。ステレオということでレンズが2つ付いており、それぞれで撮影された複数の画像が .mpo という拡張子のファイルとなってまとめて保存…

.NET Framework(C#)のLogger

C#

どういうわけか今までログについてあまり考えてきませんでしたが、最近少し需要を感じるようになりました。きっと用意されているはず、と調べると案の定いくつかありました。ごく簡単にまとめておきます。

WriteableBitmapの画素をポインタから操作する

WPFには様々なビットマップのクラスがあってややこしいですが、System.Windows.Media.Imaging.WriteableBitmapクラスは低レベルな操作ができるので、他の環境とのやり取りもしやすく私好みです。今回はWriteableBitmapの画素値にポインタで直接アクセスしま…

あみだくじ

ある人の課題を手伝ったのでメモ。下のあみだくじで、「上の 1, 2, 3, 4, 5 がそれぞれ下の同じ数字に行くように横線を引きなさい」という問題でした。パッと見で全然わからなかったのですが、線形代数の問題とのことで、置換とか互換とか、そのあたりの「対…

Ubuntu 10.04 で Mono 2.63 を使う

Mono2.6 は C#4.0 が(不完全ながら)サポートされているようなので、Ubuntu 10.04 (Server Edition) にて試そうと思いました。しかし、 $ sudo apt-get install mono-develで導入されるのは今のところ mono2.4 です。こんなときはソースからがんばってビルド…

memcpyをC#で

C#

自分がC# (.NET Framework) を使っていて一番の不満かもしれないことの一つに、memcpy (CopyMemory) が無いことが挙げられます。普通はCopyMemoryをDllImportすれば解決ですが、Linux等への移植性まで考えるとWin32APIを使うわけにはいきません。以下では、D…

多次元配列の速度比較

C#

行列のような2次元配列のデータをC#上で表現するとき、それにはいくつか方法があります。それぞれの処理速度を比べてみます。

ラッパー用ファクトリ関数でdeleteすると落ちる

以下のように、C++のクラスのインスタンスを作成するため、C#からDllImportで呼び出せるようなファクトリ関数を作ってあるとします。 #define EXTERN(type) extern "C" __declspec(dllexport) type __cdecl EXTERN(std::vector<int>*) vector_new() { return new </int>…

size_tのマーシャリング

C C# C++

以下のようなCの構造体について、P/InvokeのためにC#で同等の構造体を定義するとします。 typedef struct Hoge { size_t size; int x; }Hoge; 32bit環境に限れば、size_t は普通 unsigned int ですから、C#では以下のようになります。 [StructLayout(LayoutK…

IntPtrが示すバイト列のポインタをGZipStream/DeflateStreamで圧縮・展開する

C#

.NET Frameworkでは、System.IO.Compression.GZipStreamやSystem.IO.Compression.DeflateStreamクラスを用いて、データを圧縮・展開することができます。この2つのクラスは全く同じように使えるため、以下ではGZipStreamで話を進めます。 以下のコードは、指…

"VideoInputSharp"をつくってみた

オープンソースプロジェクト第二弾。http://code.google.com/p/videoinputsharp/videoInputの.NET Framework向けラッパーです。videoInputというのは、DirectShowによるビデオキャプチャを容易にできる、C++向けライブラリです。Windows限定なのでラッパーは…

PLAYSTATION Eye を.NET Frameworkから使う

PLAYSTATION Eye について PlayStation3用のカメラとして、「PLAYSTATION Eye」というものがあります。PLAYSTATION Eye(CEJH-15001)出版社/メーカー: ソニー・コンピュータエンタテインメント発売日: 2008/07/24メディア: Video Game購入: 4人 クリック: 110…

Debugger Visualizerを自作する(値の書き換え)

C#

Debugger Visualizerは、ただ表示するだけではなく、値の編集も行うことが出来ます。今回は、System.Text.StringBuilderの保持する文字列の表示・編集が可能なDebugger Visualizerの作成の方法の紹介です。ちなみにStringBuilderはSerializableです。以下は…

Debugger Visualizerを自作する (Serializableではないクラスの場合)

C#

今回は System.Security.Cryptography.RijndaelManaged に対するDebugger Visualizerを自作することを考えます。暗号化・復号化に必要なIVとKeyのバイト列の値を16進数表記で表示させるという特に面白くもなんともないサンプルです。このクラスはSerializabl…