|
分類:[C#]
初めまして。Leseと申します。初投稿になりますが、これからも宜しくお願いいたします。
プログラミング歴約一年ほどC言語をやっていただけです。
C#言語は始めてから1週間ほどです。C#を始める前に一応入門書を2冊読みました。
パソコンOS:Windows XP Home Edition SP3(32bit)
使用ソフト:Microsoft VisualStudio2008 Professional Edition
メモリー:3GB
CPU:Core i7 (Over Clockして3.08GHz)
※他に必要な情報があれば全てお答えします。
経緯についてですが、現在私は友人と本格的なゲームの作成をしています。
システムや、プログラミング、仕様、音関係は私で友人は絵を担当するという感じです。
製作したゲームはWindowsで起動させる為にWindowsフォームアプリケーションが作れるC#に決めました。(C++でもよかったのですが、C#を使うことにしました。)
数値や制御関係の処理はC言語をやってたこともあってスムーズにいきますが、画像関係だけがどうもうまくいきません;;
※経緯はこんな感じです。
問題点:画像をフェードアウトさせて描画してもlabelやピクチャボックスの背景がFormのbackgroundimageになってしまう。
プログラム:
private void MainForm_MouseClick(object sender, MouseEventArgs e)
{
fadein(this.CreateGraphics(), Properties.Resources.sakura, 10, 10); //フェードイン
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//フェードイン関数:戻り値無し
//fadein(pictureBox.CreateGraphics(),Properties.Resources.イメージ名,フェード段階,フェード間隔,)
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////
private void fadein(Graphics obj, Image pic, float fadetime, int sleeptime)
{
//PictureBox1のGraphicsオブジェクトを取得
Graphics g = obj;
//画像を読み込む
Image img = pic;
//フェードイン
for (float i = 1; i <= fadetime; i++)
{
//半透明で画像を描画
DrawFadedImage(g, img, i /fadetime );
//一時停止
System.Threading.Thread.Sleep(sleeptime);
}
//リソースを開放する
//img.Dispose();
//g.Dispose();
}
public void DrawFadedImage(Graphics g, Image img, float alpha) //フェードインアウト処理2
{
//背景を用意する
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();
}
プログラムの説明ですが、bmpファイルのRGBA値のA値を段々あげていくことによってフェード効果を得ているのですが、
これだと、Formのbackgroundimageは一定のまま、その上の層にフェード効果を得ていることになる為、フェード中にlabelやpictureboxの背景はformのbackgroundimageとなってしまいます。
そして、このプログラムによって描かれた画像はFormをパソコンの画面外に移動させて画面内に戻すと消えてしまうといった問題も出てきます。
この問題点の解決策をどうかご教授お願いいたします。
インターネットで検索し、書籍も読みましたが、画像処理等について書かれたページが少なくここに投稿することを決めました。
画像処理はゲームを作る上で最も大事なとこだと思っていますので是非マスターしたいです。
どうか宜しくお願いします(m´・ω・`)m
|