OpenGL de プログラミング - キー入力と文字列描画
現在地 >> メニュー >> サンプルコード::OpenCV >> キー入力 >> キー入力と文字列描画

問題


ウィンドウを作成し、キーを入力するたびにその文字を出力していくようにせよ。

その他条件:
 [Enter]で改行することが可能。
 文字の位置も多少補正する。

答え


#include <cv.h>
#include <highgui.h>
#include <cstdio>
#include <iostream>

using namespace std;


/***[フォント関連]***/
CvFont font[1];
CvScalar color={0,0,255,0};


int main( int argc, char **argv)
{

IplImage *imgA = cvCreateImage( cvSize(400,500),IPL_DEPTH_8U,3);
cvSet (imgA, cvScalarAll (255), 0);

cvNamedWindow("window",CV_WINDOW_AUTOSIZE);
cvShowImage("window",imgA);



cvInitFont(&font[0], CV_FONT_HERSHEY_SCRIPT_SIMPLEX | CV_FONT_ITALIC, 1.0,1.0);


char key[2]={'\0'};
int x = 0;
int mx = 0;
int y = 30;
bool OUT_PUT = true;
bool CHAR_SET = false;

/*********[入力ループ開始]********/
while(1)
{

key[0] = (char)cvWaitKey(0);
key[1] = '\0';

switch(key[0]){
case '\033': //ESC
exit(0);
break;

case '\015': //ENTER
y += 30;
OUT_PUT=false;
x = 0;
break;

default:
if(CHAR_SET == false)
{
mx = 15;
}
else
{
mx = 25; //mの次の文字
}
break;
}

if(OUT_PUT == true)
{
x = x + mx;
cvPutText (imgA, key, cvPoint (x,y), &font[0], color);
}

switch(key[0])
{
case 'm':
case 'w':
CHAR_SET = true;
break;

default:
CHAR_SET = false;
break;
}

cvNamedWindow("window",CV_WINDOW_AUTOSIZE);
cvShowImage("window",imgA);

OUT_PUT = true;
}
/*********[入力ループ終わり]********/


cvReleaseImage( &imgA );
cvDestroyWindow("window");

return 0;
}


メモ


結構無理やりかも。
一度、ウィンドウを表示するまで、keywait()はスルーされてるっぽい。