Up

Imageでの描画:消えない画像の描画と保存

 

描画において、例えばpictureBoxに直接行う場合、すなわち

Graphics ^g1 = pictureBox1->CreateGraphics();

Graphicsオブジェクトを用意して描画を行った場合は、他のWindowあるいはフォームの後ろに隠された後、再び前面に表示されなおしたとき描画図形が消えてしまう。しかし、pictureBoxImageプロパティを利用すると他のフォームなどの後ろに隠されても再度前面に表示されたときに描画図形も消えずに表示される。Imageプロパティを利用する場合、例えば以下のようになる。

 

int pBw = pictureBox1->Width;

int pBh = pictureBox1->Height;

pictureBox1->Image = gcnew Bitmap(pBw, pBh);              //  ImageBitmapオブジェクトを設定する

Graphics ^g1 = Graphics::FromImage(pictureBox1->Image);   //  Imageでの描画用Graphicsオブジェクトを用意する

 

上のコードを用いたプロジェクト例を以下に示す。フォームデザインは下図のように用意した。

 

SaveFileDialogコンポーネントはフォーム上に表示されるものではないので、ツールボックスから選んでフォームに貼り付けると、フォームの外側の下の方に表示される。

このプロジェクトを実行して「Draw」ボタンをクリックすると下図のように描画が行われる。

 

Draw」ボタンのクリックに対するイベントハンドラのコードは以下のようになっている。

 

描画された図形は「Save」ボタンのクリックで保存することができる。「Save」ボタンのクリックに対するイベントハンドラのコードは以下のようになっている。

 

Save」ボタンはプログラムの実行開始時はディスイネーブルである。これはコンストラクタの実行時に以下のように設定されている。

Save」ボタンは描画後イネーブルに設定される(上の「Draw」ボタンのクリックに対するコードを参照)。

プログラムのソースファイルを圧縮ファイルimageDraw.ZIPとして用意した。ここをクリックしてダウンロードすることができる。

圧縮を解凍(Vistaの場合は右クリックして「すべて展開」を選ぶ)したファイルは「ファイル|開く|プロジェクト/ソリューション」を選んで開くことが出来る(下図)。

 

しかし、ソリューションImageDraw.slnを選んで開いても何も表示されないことがある(下図)。

 

この場合は、まず「ソリューションエクスプローラ」をクリックして表示させる(下図)。

 

ソリューションエクスプローラ内のフォームのヘッダーファイル「Form1.h」をダブルクリックするとフォームのデザインが表示される(下図)。

 

メニュ「表示|コード」を選んでクリックするとコードが表示される(下図)。

 

Up