2017-09-26 110 views
0

所以我有,我想以預設速度進出褪色,褪色每約6秒鐘表的右下角的小圖標。我已經嘗試了幾種不同的方法,但是一旦第一個定時器完成後,我再也不能讓圖片再次淡入。這是我的2個定時器的代碼和它們各自的tick方法。二timer.Start()沒有被第一計時器滴答觸發

編輯定時器的聲明現在包括在內。

 Timer fade = new Timer(); 
     Timer fade2 = new Timer(); 


       fade.Interval = (200); 
       fade.Tick += new EventHandler(fade_Tick); 


       fade2.Interval = (200); 
       fade2.Tick += new EventHandler(fade_Tick_Two); 

       fade.Start(); 

private void fade_Tick(object sender, EventArgs e) 
     { 
      if (alpha < 255) 
      { 
       image = picboxPic.Image; 
       using (Graphics g = Graphics.FromImage(image)) 
       { 
        Pen pen = new Pen(Color.FromArgb(alpha, 255, 255, 255), image.Width); 
        g.DrawLine(pen, -1, -1, image.Width, image.Height); 
        g.Save(); 
       } 
       picboxPic.Image = image; 
       this.Invalidate(); 
       alpha++; 
      } 
      else 
      { 
       fade.Stop(); 
       fade2.Start(); 
      } 


     } 
private void fade_Tick_Two(object sender, EventArgs e) 
     { 

      if (alpha > 0) 
      { 
       image = picboxPic.Image; 
       using (Graphics g = Graphics.FromImage(image)) 
       { 
        Pen pen = new Pen(Color.FromArgb(alpha, 255, 255, 255), image.Width); 
        g.DrawLine(pen, -1, -1, image.Width, image.Height); 
        g.Save(); 
       } 
       picboxPic.Image = image; 
       this.Invalidate(); 
       alpha--; 
      } 
      else 
      { 
       fade2.Stop(); 
       fade.Start(); 
      } 

     } 

任何想法爲什麼第二個計時器不會啓動?我使用了斷點,並且alpha級別達到了255,但它不會觸發第二個Tick事件。

+0

您可以包括褪色和fade2的聲明? – Marisa

+0

編輯@Marisa :) –

+1

我複製你的代碼到一個新的項目形式,註釋掉所有的圖像操作和運行它:alpha值後,完全命中fade_Tick_Two達到255 – rs232

回答

1

在鏈接中所描述的方法,我引用的作品對我來說:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     test(); 
    } 
    System.Timers.Timer fade = new System.Timers.Timer(50); 
    System.Timers.Timer fade2 = new System.Timers.Timer(50); 
    Image originalImage = Image.FromFile(@"D:\kevin\Pictures\odds&Sods\kitchener.jpg"); 

    int alpha = 100; 

    void test() 
    { 
     fade.Elapsed +=new System.Timers.ElapsedEventHandler(fade_Tick); 
     fade2.Elapsed+=new System.Timers.ElapsedEventHandler(fade_Tick_Two); 
     fade.Start(); 

    } 
    delegate void timerDelegate(object sender, EventArgs e); 
    private void fade_Tick(object sender, EventArgs e) 
    { 
     if (this.InvokeRequired) 
     { 
      this.Invoke(new timerDelegate(fade_Tick), sender, e); 
      return; 
     } 
     if (alpha >= 0) 
     { 
      picboxPic.Image = SetImgOpacity(originalImage, alphaToOpacity(alpha)); 
      picboxPic.Invalidate(); 
      alpha--; 
     } 
     if (alpha < 0) 
     { 
      alpha = 0; 
      fade.Stop(); 
      fade2.Start(); 
     } 
    } 
    private void fade_Tick_Two(object sender, EventArgs e) 
    { 
     if (this.InvokeRequired) 
     { 
      this.Invoke(new timerDelegate(fade_Tick_Two), sender, e); 
      return; 
     } 
     if (alpha <= 100) 
     { 
      picboxPic.Image = SetImgOpacity(originalImage, alphaToOpacity(alpha)); 
      picboxPic.Invalidate(); 
      alpha++; 
     } 
     if (alpha > 100) 
     { 
      alpha = 100; 
      fade2.Stop(); 
      fade.Start(); 
     } 
    } 

    float alphaToOpacity(int alpha) 
    { 
     if (alpha == 0) 
      return 0.0f; 

     return (float)alpha/100.0f; 
    } 

    //Setting the opacity of the image 
    public static Image SetImgOpacity(Image imgPic, float imgOpac) 
    { 
     Bitmap bmpPic = new Bitmap(imgPic.Width, imgPic.Height); 
     Graphics gfxPic = Graphics.FromImage(bmpPic); 

     ColorMatrix cmxPic = new ColorMatrix(); 
     cmxPic.Matrix33 = imgOpac; 
     ImageAttributes iaPic = new ImageAttributes(); 
     iaPic.SetColorMatrix(cmxPic, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); 
     gfxPic.DrawImage(imgPic, new Rectangle(0, 0, bmpPic.Width, bmpPic.Height), 0, 0, imgPic.Width, imgPic.Height, GraphicsUnit.Pixel, iaPic); 
     gfxPic.Dispose(); 

     return bmpPic; 
    } 
} 

的代碼是有點粗糙,你需要的時候關閉窗體採取處置的照顧,但它消失了,並和定金,其餘可以很容易地照顧 - 我也使它更快測試「因爲人生短暫:-)

+0

這真是太棒了@KevinFord,謝謝! –

+1

你是最受歡迎的,但它甚至不是我的解決方案!所以要感謝@Venkatesh阿巴拉和[@ RaviRanjanKr了在CodeProject](http://www.codeproject.com/Tips/201129/Change-Opacity-of-Image-in-C) –

+1

[你可能想給參考答案upvote](https://stackoverflow.com/questions/4779027/changing-the-opacity-of-a-bitmap-image) - 我已經這樣做了。 –