|
分類:[C#]
度々、失礼いたします。 よろしくお願いいたします。
とあるサイト様のサンプルで以下のような「画像をフェードイン、フェードアウト」させるプログラムのソースがありました。(長くてすみません)
//PictureBox1をクリックすることにより、開始される private void PictureBox1_Click(object sender, System.EventArgs e) {
//PictureBox1のGraphicsオブジェクトを取得 Graphics g = PictureBox1.CreateGraphics();
//画像を読み込む Image img = Image.FromFile(@"C:\サンプル.jpg");
//フェードイン for (int i = 1; i <= 10; i++) { //半透明で画像を描画 Console.WriteLine(i * 0.1F); DrawFadedImage(g, img, i * 0.1F); //一時停止 System.Threading.Thread.Sleep(500); }
//フェードアウト for (int i = 9; i >= 0; i--) { //半透明で画像を描画 Console.WriteLine(i * 0.1F); DrawFadedImage(g, img, i * 0.1F); //一時停止 System.Threading.Thread.Sleep(500); }
//リソースを開放する img.Dispose(); g.Dispose(); }
public static void DrawFadedImage(Graphics g, Image img, float alpha) { //背景を用意する Bitmap back = new Bitmap(img.Width, img.Height); //backのGraphicsオブジェクトを取得 Graphics bg = Graphics.FromImage(back); //白で塗りつぶす bg.Clear(Color.White);
//ColorMatrixオブジェクトの作成 System.Drawing.Imaging.ColorMatrix cm = new System.Drawing.Imaging.ColorMatrix(); //ColorMatrixの行列の値を変更して、アルファ値がalphaに変更されるようにする cm.Matrix00 = 1; cm.Matrix11 = 1; cm.Matrix22 = 1; cm.Matrix33 = alpha; cm.Matrix44 = 1;
//ImageAttributesオブジェクトの作成 System.Drawing.Imaging.ImageAttributes ia = new System.Drawing.Imaging.ImageAttributes(); //ColorMatrixを設定する ia.SetColorMatrix(cm);
//ImageAttributesを使用して背景に描画 bg.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, ia); //合成された画像を表示 g.DrawImage(back, 0, 0);
//リソースを開放する bg.Dispose(); back.Dispose(); }
このDrawFadedImageメソッドの中でグラフィックスの色指定のところがありますが、
//白で塗りつぶす bg.Clear(Color.White);
ここを透明に書き換えました。
bg.Clear(Color.Transparent);
この状態で実行をするとフェードインはうまくいくのですが、フェードアウトはされずに、表示された状態のまま残ってしまいます。
どうしてでしょうか? 理由を教えていただきたいです。 よろしくお願いします。
|