2016-07-26 52 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