Up

画像ファイルの表示

 

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

説明: sample.bmp

図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のようにスクリーンに表示される。

説明: temp1.bmp

図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のようになる。

説明: temp2.bmp

 

 上のコードにおけるConvString関数は.NET (CLI/CLR)での文字列型StringViSaGeの関数で用いられる文字列型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に表示する>に用意した。

 

Up