画素値へのアクセスについて:

ちょっと画像の画素値をいじくってたんだけど、どうも変な感じ・・・
改めて確認すると、なぜか画素値にマイナスの値が格納されている。
え、画素って0〜255じゃないの?と思ってよくよく見ると、IplImage使って呼び出したときの画素値はchar型らしい。
というわけで、

IplImage* img;
int x, y;

int data = (unsigned char)img->imageData[y*img->widthStep + x]

こんな感じでいいですかね。

ボールたちが動いていって反射するプログラム

ボールが動いていくプログラム の続きみたいなもの。
とりあえず反射させてみる+ボールのクラスを作ることでボールを増やすことが可能になりました!これぞオブジェクト指向ってやつだね

主な変更点は
・WinodowListenerの追加(閉じるボタンで閉じるようになった)
・反射させた(簡単なif分の追加)
・クラスを三つに分けた(メイン、キャンバス、ボール)


ってところ。

続きを読む

ボールが動いていくプログラム

いつかゲームが作れたらいいねなんて思ってる人はきっと多いと思う。
かくいう自分もその一人で、ようやく思ってるだけから実行に移そうかなとか考え中。
ちょうどJavaをやる機会があったのでとりあえずボール動かしてみたよ。次の目標は壁での跳ね返りだね。


まともに参考にするならこちらのサイトが良いと思います。
多くのサンプルコードもあってとてもありがたい。
参考:ボールを動かす - 人工知能に関する断想録

ソースは続きを読むから:

続きを読む

jarファイルをexeファイルに変換するソフト:exewrap

授業の課題でJavaのプログラムを書いてソース+exeファイルを提出、というのがあったので。

exewrap:http://www.ne.jp/asahi/web/ryo/exewrap/

を使ってexeを作成した。
File->Export->Jarファイルでjarファイルを作成し、D&Dでexeファイルが出来る。


似たようなソフトは結構あるみたいだけど、ひとまずjarから変更出来ればよかったので比較はしてないです

Delegateを使ってマルチスレッドをおこなうサンプルコード

forループしながら数字を出力し続ける関数を二つ作り、それぞれ別スレッドを立てて実行。
しかし無駄なステップが多いんじゃないかなこの作業・・・


1.ThreadStartに関数を登録(デリゲート化)
2.ThreadにThreadStart型の関数を登録
3.Thread型の関数->Startでスレッド開始


#引数と戻り値これどうやって使うんだろ
#ThreadStartはvoid Function(void)だから、もしかして使えない?

ソースは続きを読むからどうぞ:

続きを読む

^System::Stringを*charにして使いたい

VisualStudioを使ってC++/CLIを書き始めた。
それにOpenCVOpenGLを絡めて画像を扱うとする。


C++/CLIでファイル名なんかのデータは基本的にSystem:Stringで与えられるが、
他のプログラムに渡そうと思ったら*char型への変換が必要。
#OpenCVのcvLoadImageとか


そこでその変換方法。
System::Runtime::InteropServices::Marshal::StringToGlobalAnsi
を使ってchar*型のポインタに変換、代入し、使い終わったchar*を
System::Runtime::InteropServices::Marshal::FreeHGlobal
で開放してやると良い、らしい。どっちも長い。


画像処理ソリューション:【C++/CLI】System::String^からchar*へ変換
http://imagingsolution.blog107.fc2.com/blog-entry-89.html
よりほぼ抜粋。感謝!

OpenFileDialog^ dlg = gcnew OpenFileDialog;
dlg->Filter = "ビットマップ(*.bmp)|*.bmp";
dlg->ShowDialog();

//System::String^からchar*へ変換
char* pStr = (char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(dlg->FileName).ToPointer();
IplImage *src_img = cvLoadImage(pStr, CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
System::Runtime::InteropServices::Marshal::FreeHGlobal(IntPtr(pStr));