2016-07-26 81 views
1

所以我做了這個函數,繪製一個帶有圖片框和圖片的「按鈕」作爲參數。該按鈕應該是活躍的時候是藍色和灰色不活動時,但不知何故機能的研究吸引到按鈕上藍線時,它被認爲是不活躍c#繪製函數錯誤

button resources

grey background with blue line

如何刪除藍線?

void DrawButton(PictureBox PIC, Image IMG) 
    { 
     using (Font myFont = new Font("Century Gothic", 11)) 
     { 
      Bitmap bitmap = new Bitmap(IMG, PIC.Width, PIC.Height); 
      bitmap.MakeTransparent(); 
      Graphics graph = Graphics.FromImage(bitmap); 
      // PIC.Tag is "Next" 
      graph.DrawString(PIC.Tag.ToString(), myFont, Brushes.White, new Point(42, 0)); 
      PIC.Image = bitmap; 
      graph.Dispose(); 
     } 
    } 

而且我的函數的調用:

private void picNext_MouseLeave(object sender, EventArgs e) 
    { 
     if (_CURRENT_PAGE * 12 < DB.GetOnlinePlayers()) 
      DrawButton(picNext, Properties.Resources.play_no_hover); 
     else DrawButton(picNext, Properties.Resources.play_no_active); 
    } 
    private void picNext_MouseUp(object sender, MouseEventArgs e) 
    { 
     if (_CURRENT_PAGE * 12 < DB.GetOnlinePlayers()) 
      DrawButton(picNext, Properties.Resources.play_hover); 
     else DrawButton(picNext, Properties.Resources.play_no_active); 
    } 

    private void picNext_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (_CURRENT_PAGE * 12 < DB.GetOnlinePlayers()) 
      DrawButton(picNext, Properties.Resources.play_take); 
     else DrawButton(picNext, Properties.Resources.play_no_active); 
    } 

    private void picNext_MouseEnter(object sender, EventArgs e) 
    { 
     if (_CURRENT_PAGE * 12 < DB.GetOnlinePlayers()) 
      DrawButton(picNext, Properties.Resources.play_hover); 
     else DrawButton(picNext, Properties.Resources.play_no_active); 
    } 
+0

這是所有有代碼?如果是,你的'Properties.Resources.play_ *'資源是怎麼樣的? –

+0

你在做什麼:Winforms,WPF,ASP ..? __Always__正確標記您的問題! – TaW

+1

@DirkVollmar我添加了一張圖片。 – jeaks

回答

1

這個問題似乎涉及到透明度。顯然,藍線來自閃爍的按鈕的先前活動版本。這是我猜想發生了什麼:

您正在調用bitmap.MakeTransparent方法,其中「使默認透明顏色透明此位圖。如果系統未指定透明顏色,​​是透明顏色。

您的非活動按鈕位圖可能使用​​(#FFD3D3D3),因爲它們被製成透明的像素現在顯示爲藍色。

的解決方法是用另一種顏色需要是透明的,然後調用bitmap.MakeTransparent和顏色傳遞到方法的像素,例如:

// Get the color of a background pixel. 
Color backColor = myBitmap.GetPixel(1, 1); 

// Make backColor transparent for myBitmap. 
myBitmap.MakeTransparent(backColor); 
+1

由於這些圖像是Png,它們可能已經具有alpha透明度,並且根本不需要使用MakeTransparent。 – Groo

+0

@Groo就是這樣,謝謝 – jeaks