Up

画像ファイルの表示と透明度付きコピー

 

 図1のように用意した画像ファイルを図2のように表示するVisual C++プログラムPictureLoadCopy.exeを作成した。

p1.bmpp2.bmp

図1 画像p1.bmpp2.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)。

無題.jpg

図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++プログラミング入門」勁草書房>を用意した。

 

Up