問題
ウィンドウを作成し、キーを入力するたびにその文字を出力していくようにせよ。
その他条件:
[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()はスルーされてるっぽい。