画像ファイルの表示
画像ファイル(*.bmp)をViSaGeのスクリーンに表示するVisual C++プログラムを作成した。例えば、ペイントで図1のような図を用意しておく。

図1
これをsample.bmpという名前をつけて保存しておき、ViSaGeによってスクリーンに表示することを考える。パソコンからファイルを読み出してViSaGeのスクリーンに表示する関数としてvsgDrawImage関数がある。これを例えば
openFileDialog1->Filter = "Bitmap (*.bmp)|*.bmp";
openFileDialog1->Title = "File name ?";
if
(openFileDialog1->ShowDialog() ==
System::Windows::Forms::DialogResult::Cancel) return;
::vsgSetDrawOrigin(::vsgGetScreenWidthPixels()/2.0,
::vsgGetScreenHeightPixels()/2.0);
::vsgSetDrawPage(vsgVIDEOPAGE, 0, 0);
::vsgSetDrawMode(vsgCENTREXY);
::vsgDrawImage(0, 0, 0, ConvString(
openFileDialog1->FileName ));
というように用いると図2のようにスクリーンに表示される。

図2
センター指定ではない方法としては、例えば
openFileDialog1->Filter = "Bitmap (*.bmp)|*.bmp";
openFileDialog1->Title = "File name ?";
if
(openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::Cancel)
return;
::vsgSetDrawOrigin(0, 0);
::vsgSetDrawPage(vsgVIDEOPAGE, 0, 0);
::vsgSetDrawMode(vsgRADIALAXIS);
::vsgDrawImage(0, 0, 0, ConvString( openFileDialog1->FileName ));
を実行すると図3のようになる。

上のコードにおけるConvString関数は.NET (CLI/CLR)での文字列型StringをViSaGeの関数で用いられる文字列型char *に変換するものであり、ソースファイルcommon.cppにおいて以下のように与えられている。
char * ConvString( String ^ s ){
marshal_context
^ cntxt = gcnew marshal_context();
const char * cflnm =
cntxt->marshal_as<const char *>( s );
char * pc = new char[s->Length + 1];
for (int i = 0; i
< s->Length + 1; i++) pc[i] = cflnm[i];
return pc;
}
このような変換はマーシャリングというが、岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房、Pp. 169-172 などを参照されたい。画像ファイルの名前の指定は、実行時に表示されているボタンをクリックすれば、ファイル名設定のダイアログが表示されるので、そこで指定する。
上のプログラムのソースコードなどは圧縮ファイルDrawPicture1.ZIPにまとめた。ファイル名DrawPicture1.ZIPをクリックしてダウンロードしたものを解凍すればVisual C++2008などで開くことができる。解凍は、ZIP形式の圧縮ファイルを解凍するソフトを用いればよいが、Windows VistaあるいはWindows 7であれば、ファイル名DrawPicture1.ZIPをマウスの右ボタンでクリックして表示されるメニュから「展開」あるいは「解凍」などを選べば解凍できる。解凍後、ViSaGeに接続されているパソコンにコピーすればよい。
画像ファイルを2ページに読み込んで、図1および図2の画面を交互に提示するプログラムも作成した。交互に提示するために関数vsgSetCommandを以下のように用いた。
openFileDialog1->Filter = "Bitmap (*.bmp)|*.bmp";
openFileDialog1->Title = "File name ?";
if
(openFileDialog1->ShowDialog() ==
System::Windows::Forms::DialogResult::Cancel) return;
::vsgSetDrawPage(vsgVIDEOPAGE, 0, 0);
::vsgSetDrawMode(vsgCENTREXY);
::vsgDrawImage(0, 0, 0,
ConvString(openFileDialog1->FileName));
::vsgSetDrawPage(vsgVIDEOPAGE, 1, 0);
::vsgSetDrawOrigin(0, 0);
::vsgSetDrawMode(vsgRADIALAXIS);
::vsgDrawImage(0, 0, 0,
ConvString(openFileDialog1->FileName));
VSGCYCLEPAGEENTRY page[2];
for (int i = 0; i < 2; i++){
page[i].Page = i;
page[i].Xpos = 0;
page[i].Ypos = 0;
page[i].ovPage = 0;
page[i].ovXpos = 0;
page[i].ovYpos = 0;
page[i].Frames = 100;
page[i].Stop = 0;
}
::vsgPageCyclingSetup( 2, page );
::vsgSetCommand( vsgCYCLEPAGEENABLE );
プログラムのソースコードなどは圧縮ファイルDrawPicture2.ZIPとしてまとめた。ダウンロードして試すことができる。
なお、Visual C++でビットマップファイル(*.bmpファイル)を作成すれば、それをViSaGeに読み込ませて表示することができる。この場合、オンラインでのVisual C++による画像作成とViSaGeによる表示が行えることになるが、このプログラム例はウェブサイト<Visual C++で作成した画像をViSaGeに表示する>に用意した。