画像ファイルの表示と透明度付きコピー
図1のように用意した画像ファイルを図2のように表示するVisual C++プログラムPictureLoadCopy.exeを作成した。
図1 画像p1.bmpとp2.bmp
図2 画像ファイルp1.bmp(左)とp2.bmp(右)を読み込み表示。
透明度25%で右側の画像を左側にコピーすると図3のようになる。
図3
画像ファイルの表示は、次のコード
pictureBox1->Load(openFileDialog1->FileName);
のようにPictureBoxクラスを用いて簡単にできる。
透明度付きでコピーするときは、次のコード
bm = gcnew
Bitmap(pictureBox2->Width, pictureBox2->Height);
pictureBox2->DrawToBitmap(bm, Rectangle(0, 0, pictureBox2->Width, pictureBox2->Height));
のようにBitmapクラスのオブジェクトに画像を移しておいてから、透明度をアルファ値を用いて設定する。透明度とアルファ値は逆の関係にある。アルファ値の設定は次のように行っている。
for (int i = 0; i < bm->Width; i++)
for (int j = 0; j < bm->Height; j++){
Color ^ c = bm->GetPixel(i, j);
bm->SetPixel(i, j,
Color::FromArgb(cAlpha, c->R, c->G, c->B));
}
アルファ値を設定したBitmapの画像を、次のようにコピーすると、アルファ値を用いてコピーされる。
Graphics ^ g = Graphics::FromImage(pictureBox1->Image);
g->DrawImageUnscaled(bm, 100, 100);
プログラムPictureLoadCopy.exeは.NET Framework3.5対応である。プログラム名PictureLoadCopy.exeをクリックしてダウンロード・実行できる。実行の前に、図1に示すような画像ファイルを用意しておく。プログラムを実行すると図4のフォームが表示される。
図4
「読み込み」ボタンをクリックすると、図5のオープンファイルダイアログが表示される。
図5
表示する画像ファイル名を選んで「開く」ボタンをクリックすると、選んだ画像ファイルが表示される。左右2個の「読み込み」ボタンをクリックして左右に画像ファイルを表示する(図2)。
スクロールバーで透明度を好みの値に設定後、「コピー」ボタンをクリックすると、設定した透明度で右側の画像が左側にコピーされる(図7)。
図6
図7
プログラムのソースコードファイルなどは、圧縮ファイルPictureLoadCopy.zipとしてまとめた。圧縮ファイル名PictureLoadCopy.zipをクリックしてダウンロードしたものを、マウスの右ボタンクリックで表示されるメニュから「解凍」あるいは「展開」などを選んで解凍すれば、Visual C++2008などで開くことができる。
右側の画像において透明色を指定して左側にコピーする機能を追加したプログラムPictureLoadCopyTP.exe(.NET Framework3.5対応)も作成した。このプログラムPictureLoadCopyTP.exeを実行すると図8のフォームが表示される。
図8
左右の「読み込み」ボタンをクリックして図9のように画像ファイルを読み込む。
図9
「コピー」ボタンの機能は上の最初のプログラムPictureLoadCopy.exeにおけるものと同じであるが、「コピー(中抜き)」ボタンをクリックした場合は、画像の周辺部の色が透明色として扱われてコピーされるので図10のようになる。
図10
透明色の設定はMakeTransparentメソッドを用いて、
bm->MakeTransparent(bm->GetPixel(3,3));
と行っている。上のコードでは、画像の左上隅の方(3, 3)のピクセルの色を透明色として指定している。
プログラムPictureLoadCopy.exeを少し変更して透明色を指定したコピーを行う機能を付け加えたプログラムPictureLoadCopyTP.exeのソースコードファイルなどをまとめた圧縮ファイルPictureLoadCopyTP.zipも用意した。圧縮ファイルPictureLoadCopyTP.zipをクリックしてダウンロードしたファイルの名前PictureLoadCopyTP.zipを、マウスの右ボタンでクリックして表示されるメニュから、「解凍」あるいは「展開」を選んで解凍したファイルは、Visual C++2008などで開くことができる。
なお、Visual C++プログラミングの入門書として、<岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房>を用意した。