C#

縦書き

C#

結構前の飲み会であんどちんさんと話してたときに、どういう経緯だったか忘れたのですが「与えられた文字列をできるだけ短い文で縦書きにするのなんて C# があれば余裕ですよ」みたいなことを自分が言った気がするので、今更ながらやってみました。 using Sy…

RAII なクラス

C#

あると便利なこともあるので作ってみた。 public class Raii : IDisposable { Action action; public Raii(Action action) { this.action = action; } public void Dispose() { action(); } } Form form; form.SuspendLayout(); using (Raii r = new Raii(()…

IEnumerable> を全て繋げて IEnumerable に変換する

C#

単純に考えると、 IEnumerable<IEnumerable<int>> values = ...; IEnumerable<int> result = new List<int>(); foreach (IEnumerable<int> v in values) { result = result.Concat(v); } こんな感じなんだろうけど、これって Accumulate じゃん!とか思ったので、こんなのは拡張メソッドにあ</int></int></int></ienumerable<int>…

Excel データから配列データへの変換

C#

例えば Excel のデータで hoge hogehoge mokemokke mokeke となってるデータをこんな風に整形して貼り付けたいわけです。 { hoge, hogehoge, }, { mokemokke, mokeke, },ツールを探せばいくらでもありそうですが、探すより書いたほうが早そうなのでこれを C#…

string から特定のいくつかの文字を消去したい

C#

たとえばある文字列からスペース、タブ、改行を削除したい場合にはどうやって書くんだろう? Split + Join? string str2 = string.Join("", str.Split(' ', '\t', '\r', '\n')); 文字列の Replace? string str2 = str.Replace(" ", ""); str2 = str2.Repla…

Boost.Bind を C# で作りたい(3)

public static class Boost { public class PlaceHolder { public PlaceHolder(int v) { Value = v; } public int Value; } public static PlaceHolder _1 = new PlaceHolder(1); public static PlaceHolder _2 = new PlaceHolder(2); public static PlaceHo…

Boost.Bind を C# で作りたい(2)

とりあえず全部の引数を束縛するのであれば簡単に作れるようだ。 delegate R Function<R>(); delegate R Function<R, T1>(T1 t1); delegate R Function<R, T1, T2>(T1 t1, T2 t2); // 以下略 Function<R> Bind<R>(Function<R> f) { return delegate { return f(); }; } Function<R> Bind<R, T1>(Funct</r,></r></r></r></r></r,></r,></r>…

Boost.Bind を C# で作りたい

と思ったんだけどどうすればいいんだろう。

OpenGL で円を描く

OpenGL で円を描くには、多角形描画を使います。 ある程度の数で多角形を描画すると、円っぽく見えるようになります。 実験したところ、40 とか 50 ぐらいに設定すると、かなり大きくしてもそれなりに円に見えるようになるようです。 ということで Yanesdk …

Yanesdk.Sound.Sound 改造(2)

Yanesdk.Sound.Sound 改造 前のバージョンでのバグを修正したのと、再生位置取得と停止イベント等のイベントを追加しました。 id:melpon:20000107 再生位置は、非同期で更新されるので、排他処理を行うようにしました。 必要最低限のところだけ排他制御をし…

Yanesdk.Sound.Sound 改造

Yanesdk の掲示板にて、 はじめまして。 BGMとしてループ再生するときに、全体をループさせるのではなく、 LoopStartとLoopEndの場所をタグなり外部ファイルなりで指定して、 頭から再生開始して、途中から途中まででループさせようとしています。SDK…

OpenGL のブレンディングテスト

OpenGL で画像をブレンドする場合、glBlendFunc() という関数を使うわけですが、そのテストをするためのツールを Yanesdk で作ってみました。 まあ、単に自分が「このブレンドとこのブレンド組み合わせるとどうなるんだろ?」と思って作ってみただけです。 …

Yanesdk で FillRectangle を行う(v1.55)

まず、どこかで1x1の白のテクスチャを作ります。 Bitmap bitmap = new Bitmap(1, 1, PixelFormat.Format32bppArgb); bitmap.SetPixel(0, 0, Color.FromArgb(255, 255, 255, 255)); texture = new Yanesdk.Draw.GlTexture(); texture.SetBitmap(bitmap); …

multimap

描画のプライオリティを SortedDictionary を使って、 SortedDictionary<int, DrawInfo> drawInfoList; とかやろうと思ったんですが、これだと同じプライオリティが使えないので全然ダメポ。 STL なら multimap があって、重複したキーが使えて非常に楽だったんですが、どう</int,>…

SelectEnumerable

http://blogs.wankuma.com/episteme/archive/2006/12/01/48016.aspx class Hoge{ private int id; public Hoge(int id) { this.id = id; } public void Func() { Console.WriteLine("func({0})", id); } } Hoge[] hogeArray = { new Hoge(0), new Hoge(1), n…

C# で低レベル画像転送

C# には Bitmap クラスが用意されているのだけれども、ちょっとばかしアルファブレンドだの加算合成だの乗算合成だのを比較的高速に処理する必要が出てきたので、メモリを直接弄ってごにょごにょしてみることにしました。 が、しかしこれが意外に頭を悩ませ…

.NET Framework 2.0 の string のバグ?

今、C# の string クラスのインターフェースを真似て BREW 用の文字列クラスを作っている関係で、string クラスの仕様を一通り調べてたんだけど、なぜか string.LastIndexOf() がおかしな動作をする。 string str = "あいうえお"; // -1 str.IndexOf("あ", 5…

文字列クラスの効率

今、C++ で文字列を表すクラスを書いているんだけど、とりあえずインターフェースとして C# の String クラスを真似してたりする。

Yanesdk 改造中(8)

さらに原因を探してみると、どうやらメモリに関連付けたデバイスコンテキストと、ウインドウに関連付けたデバイスコンテキストの ChoosePixelFormat の結果が同じでないと共有出来ないようです。 昨日の成功したビデオカードの場合は、値が異なってても共有…

Yanesdk 改造中(7)

自分の見通しが甘かったようです……。 wglShareLists() でレンダリングコンテキストの共有が出来るわけですが、これ、ビットマップハンドルを関連付けたデバイスコンテキストから取得したとレンダリングコンテキストと、ウインドウハンドルを関連付けたデバイ…

Yanesdk 改造中(6)

DIB の生成について。

Yanesdk 改造中(5)

Windows は、wglCreateContext() でデバイスコンテキストを渡せば、レンダリングコンテキストが返ってくるので、それを使って描画することによって、デバイスコンテキストに描画されます。 つまり、デバイスコンテキストさえあれば、ウインドウ上だろうがメ…

Yanesdk 改造中(4)

時間が出来たのでイメージ周りの新しいやり方を考えてみました。 前回の、描画情報リストで管理して擬似的なイメージクラスとして多態するのは、転送先として使っていると描画情報リストを使って多態しているという部分を意識しないといけなくなるため、あま…

Yanesdk 改造中(3)

結局、多く描画すると速度の低下とメモリの消費が大きくなってしまうのは防ぐことが出来そうにないので、仮想イメージはその中身が描画情報リストしかもっていないということを意識しないといけなくなりそうです。 なので、これを通常のイメージの代替として…

Yanesdk 改造中(2)

ITexture はスクリーンにしか描画出来ないということは、逆に言えばスクリーンに描画する瞬間までテクスチャを貼り付ける必要はありません。 なので、幅と高さ、描画情報リストを持った仮想イメージを作って、スクリーンに描画する瞬間に幅と高さでクリッピ…

Yanesdk 改造中

と言っても YaneSDK のソースを直接弄っているわけではなく、ヘルパみたいなクラスを用意しているだけですが。 YaneSDK の描画周りは、ITexture → スクリーンしかサポートしていない、つまり ITexture は source 限定、スクリーンは destination 限定なので…

C# から WindowsAPI コール(2)

id:melpon:20060618 のことで悩んでると…… # 通りすがり 『つhttp://www.divakk.co.jp/blog/aoyagi/archive/2003/07/16/361.aspx』 ktkr!!!! 通りすがりさんほんとにありがとうございますm(__)m

C# で IME 操作をフックする

C# でウインドウプロシージャをフックする(id:melpon:20060616)でウインドウプロシージャをフック出来るようになったんですが、ウインドウプロシージャをフックしてもどうにもならない場合があります。 IME 操作中にウインドウプロシージャに送られてきた …

C# から WindowsAPI コール

C# から WindowsAPI を呼び出すのってめんどい。 特に define 定義されている値。 全部合計するといくつあるねん。しかも OS によって違うのもあるっぽいからこいつらどうしようみたいな。 MSDN のページは Win32.〜 って書いて WindowsAPI を呼び出してるけ…

C# でウインドウプロシージャをフックする

C# の場合、コントロールのウインドウプロシージャの動作を外部から変更出来ないし、イベントを追加することも出来ない。 だから、ウインドウプロシージャの動作を変更しようと思うと、そのコントロールを継承し、WndProc や PreProcessMessage を変更する必…