フェードアウト時にぶちっと画像が一瞬切れます。
以下のように、アプリ起動時に、フェードインで現れてフェードアウトで消えていくフォームがあります
その後に実際に使用するフォームを表示したいと思っています。
ただwindows8だと問題ないのですがXPやwindows7で下記コードを実行するとちょうど
Thread.Sleep(4000)という命令以降フェードアウトしていくのですが
この時一瞬画像がブチっとコマ落ちしたような現象がおきるのです。
原因がわからず困っております。
どなたか原因がわかるかたいらっしゃいませんでしょうか?
お願いします!
public class MainClass{
public static void Main(string [] args){
try{
FrontForm frontObj = new FrontForm();
frontObj.StartPosition = FormStartPosition.CenterScreen;
frontObj.SetImage("f04.jpg");
frontObj.FormBorderStyle = FormBorderStyle.None;
Application .EnableVisualStyles();
Application.Run(frontObj);
Application.Run(new Form());
}catch(Exception e){
MessageBox.Show(e.ToString());
}
}
}
public class FrontForm : Form{
//フェードさせるためのタイマーオブジェクト
public System.Windows.Forms.Timer TimerObj ;
//画面にフェードインアウトで表示させる画像用ラベル
public Label labelObj ;
//実際に表示させるための画像パス
public string imagePath;
//フェードインとアウトの境目フラグ
public int fadeFlag;
//コンストラクタ
public FrontForm(){
this.Width = 900;
this.Height = 400;
this.labelObj = new Label();
this.labelObj.Width = this.ClientSize.Width;
this.labelObj.Height = this.ClientSize.Height;
this.Controls.Add(this.labelObj);
this.Opacity = 0.0F;
this.Visible = false;
this.fadeFlag = 0;
this.Load += new EventHandler(this.RenderFade);
}
//フェード用画像をセットする
public void SetImage (string path){
Bitmap bit = new Bitmap(this.ClientSize.Width,this.ClientSize.Height);
Graphics gr = Graphics.FromImage(bit);
this.imagePath = path;
Image imageObj = Image.FromFile(this.imagePath);
gr.DrawImage(imageObj,0,0,this.ClientSize.Width,this.ClientSize.Height);
this.labelObj.BackgroundImage =bit;
}
public void RenderFade(Object sender ,EventArgs e){
//タイマーイベントの作成
this.TimerObj = new System.Windows.Forms.Timer();
this.TimerObj.Tick += new EventHandler(this.RenderMethod);
this.TimerObj.Interval = 30;
this.TimerObj.Start();
}
public void RenderMethod(Object sender ,EventArgs e){
if(this.fadeFlag == 0){
Console.WriteLine(this.Opacity.ToString());
this.Opacity += 0.01F;
if(this.Opacity == 1){
this.fadeFlag = 1;
Thread.Sleep(4000);
}
}
if(this.fadeFlag == 1){
Console.WriteLine("====" + this.Opacity.ToString() + "====");
this.Opacity = this.Opacity - 0.01F;
if(this.Opacity ==0){
this.Close();
}
}
}
}