C# - 图片框中的图片渐变

时间:2013-10-02 19:57:23

标签: c# gradient picturebox

我已经在VB.NET中开发了一个应用程序,现在我正在转向C#。

到目前为止一切顺利,但我遇到了一个问题。

我有一个带有图片的pictureBox。在这个图片框中,我想要一个渐变,从顶部透明到颜色“控制”,以与表格背景颜色融为一体。我已经在VB.net中完成了这项工作,但是当我尝试在C#中执行此操作时,渐变似乎被绘制出来,但是在图片后面。

以下是我的尝试:

private void PictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
    Color top = Color.Transparent;
    Color bottom = Color.FromKnownColor(KnownColor.Control);

    GradientPictureBox(top, bottom, ref PictureBox1, e);
}

public void GradientPictureBox(Color topColor, Color bottomColor, ref PictureBox PictureBox1, System.Windows.Forms.PaintEventArgs e)
{
    LinearGradientMode direction = LinearGradientMode.Vertical;
    LinearGradientBrush brush = new LinearGradientBrush(PictureBox1.DisplayRectangle, topColor, bottomColor, direction);
    e.Graphics.FillRectangle(brush, PictureBox1.DisplayRectangle);
    brush.Dispose();
}   

然而,这实际上似乎有效,但它再次描绘了图片背后的渐变。在VB.net中,它在图片顶部绘制了它,没有任何额外的代码..

我需要添加额外的东西吗?

如果在C#2010 express中编码很重要。

1 个答案:

答案 0 :(得分:3)

以下代码可以做到。

我可能会考虑将其作为自己的控件,并使用以下代码作为其Paint事件。

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.DrawImage(pictureBox1.Image, 0, 0, pictureBox1.ClientRectangle, GraphicsUnit.Pixel);

        Color top = Color.FromArgb(128, Color.Blue);
        Color bottom = Color.FromArgb(128, Color.Red);
        LinearGradientMode direction = LinearGradientMode.Vertical;
        LinearGradientBrush brush = new LinearGradientBrush(pictureBox1.ClientRectangle, top, bottom, direction);

        e.Graphics.FillRectangle(brush, pictureBox1.ClientRectangle);
    }

此代码生成以下图像

enter image description here