2

VB.NET でアプリケーションを開発しましたが、現在は C# に移行しています。

ここまでは順調に進んでいますが、1 つの問題に直面しています。

写真が入った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 でコーディングします。

4

1 に答える 1

4

次のコードはそれを行います。

これを独自のコントロールにして、次のコードをその 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);
    }

このコードは次の画像を生成します

ここに画像の説明を入力

于 2013-10-03T14:04:06.983 に答える