プログラム

fopenのエラーコード表示、メモリ解放チェック

・fopenのエラーコード表示 strerror(int errno);を用いてエラー内容の表示が可能。errno.hをincludeすることでerrnoという変数にエラーコードが格納される。 したがって、エラーチェックを行いたい部分の直後に printf("%s\n",strerror(errno)); と書くこと…

IplImageのimageDataについて

imageDataを弄ることで色情報の操作が可能。その際、imageDataは符号付き文字列であるので、符号なし文字列にいったん代入してから操作するのがよい。 いきなり、int型やfloat型にキャストすると負の値が出てきて、おかしなことになる。

STLについて、今さらだけど。

STLのvectorやlistのメモリ管理ってどうなってるのか、ちょっと気になったので。 Cで配列確保した時は、ちゃんとfree()しないと解放されないけど、STLについては変数のスコープを抜けた時点で自動的に解放してくれるらしい。 Javaに近くなってるのですね。

OpenCV エッジ抽出プログラム

サンプルは載せてませんが、書いていてこれは気をつけなければということだけ。 エッジ抽出を行う元画像をcvLoadImage()で読み込む際に、必ずCV_LOAD_IMAGE_GRAYSCALEで読み込むこと。 色つきで読み込むと、エッジ抽出できませんよねw

OpenCV エッジ抽出プログラム

サンプルは載せてませんが、書いていてこれは気をつけなければということだけ。 エッジ抽出を行う元画像をcvLoadImage()で読み込む際に、必ずCV_LOAD_IMAGE_GRAYSCALEで読み込むこと。 色つきで読み込むと、エッジ抽出できませんよねw

三項演算子 ? :

式1?命令1:命令2 式1が真であれば、命令1が実行され、偽であれば命令2が実行される。 ショートコーディングしたくて、よく使おうとするんだけど、使いたいときに限って忘れて出てこないんだよなぁ。 だから、メモメモっと。

OpenCV cvSmooth

cvSmooth(img1,img2,type,param1,param2,param3,param4); img1は入力画像、img2は平滑化された画像を格納する部分。 typeは平滑化するときのフィルタの種類。 param1は平滑化のパラメータ、param2はスケーリングに関係する部分。param3はガウシアンフィルタ…

IplImage構造体

typedef struct _IplImage { int nSize; /* sizeof(IplImage) */ int ID; /* version (=0)*/ int nChannels; /* Most of OpenCV functions support 1,2,3 or 4 channels */ int alphaChannel; /* ignored by OpenCV */ int depth; /* pixel depth in bits: I…

pow(int,int)で関数のオーバーロードができません。

CV2005では怒られます。 pow((int)i,(int)j)というようにキャストしてもダメだったので、調べた結果powにdouble型の何かの変数とint型の変数を組み合わせて使うことでエラー回避可能。 なんという無駄なエラー…。 ということで、pow(double,int)でこの手のエ…

IEEE 1394 card bus controllerのインストール

ohci1394.sysがないと言われる。 C:WINDOWS/system32/DRIVERS/にある。

TCHARでも怒られた

TEXT("");というのが使えそう。 後、libc.lib/libcd.lib が開けませんというエラーはプロジェクト→プロパティ→リンカ→入力で特定ライブラリの無視でうまくコンパイルできるようになる。

テキストファイル保存2

エディットボックスからGetWindowText()で内容を取ってきてWriteString()で書き込むと改行が二回行われる。 解決策:wchat_t型の変数にGetLine()で一行取得すると"\r\n"を含まない形で取得できる。WriteString()で書き込むときは'\n'をつけることで改行がで…

VC2005でCStringからcharへのコピー

VC2005では文字コードがUnicodeになっている。2005以前はstrcpy()でコピー可能だったが、2005以降はエラーが発生するようになった。 その代わりTCHAR型が使え、この配列にコピーすることは可能。 サンプル CString str = _T( "test" ); TCHAR buf[ 256 ]; _t…

テキストファイル保存

エディットボックスに表示した文字をテキストファイルに保存したいんだが、エディットボックスでの改行("\r\n")がファイルに保存される時に"\r\r\n"になってしまう。 どうしたら'\r'を除去できるのか・・・。 一度、char型に保存して除去すれば大丈夫かと思った…

SetWindowText()に数値表示させるには。

SetWindowText()ではCString型の文字列の表示しか行っていない。 数値をいったんchar型にsprintf()で連結して、CString(temp)でCstring型にキャストしてやる。 これで数値も表示可能。

CreateFile()のキャスト。

CreateFile()の第一引数をLPCSTRなどに無理矢理キャストするとハンドルを取ることができないことがある。 VC2005ではデフォルトがUnicodeになっているので、キャストするとハンドルを取ってこれない。 なので、_T("COM4")と第一引数にするのがよい。

Cstringを数値に変換

atoi()やatof()を使うと 'atoi':1 番目の引数を 'CString' から 'const char *' に変換できまん。 'atoi':1番目の引数を 'LPCTSTR' から 'const char *' に変換できません。 といったエラーが吐き出される。 これは、文字コードが Unicodeモードになっている…

MFC ラジオボタン

CheckRadioButton( IDC_FirstButton, IDC_LastButton, IDC_CheckButton ); この関数で、チェックマークを外すこともつけることもできる。 IDC_CheckButtonの部分にTRUE、FALSEを入れることで可能。あるいは、groupに登録して自動的にチェックマークを外す。

CreateFileの戻り値

戻り値がINVALID_HANDLE_VALUEの時は通信が失敗している。 それ以外は、成功。 これでComポートと通信が確立できたかどうかの判断ができる。

windowsアプリ

http://www.kumei.ne.jp/c_lang/ 猫でも分かるプログラミングの SDKから勉強するのが吉。 MFCはSDKのプログラミングが分からないとむりぽ。

頂点表示

glBegin(POINT);じゃなくて glBegin(POINTS);らしい。 点のサイズ変更は、ピクセル単位で glPointSize(SIZE);で変更できる。 (注)glBegin();の前に入れること。