多色渐变不显示所有颜色

时间:2018-03-09 07:15:41

标签: c# winforms gradient

我有一个多色渐变,它由14种颜色组成。这是我的代码:

panel1.Paint += new PaintEventHandler(panel1_Paint);
panel1.Refresh();

private void panel1_Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;

    LinearGradientBrush br = new LinearGradientBrush(this.ClientRectangle, Color.FromArgb(255, 0, 0, 0), Color.FromArgb(255, 100, 100, 200),0, false);
    System.Drawing.Drawing2D.ColorBlend cb = new System.Drawing.Drawing2D.ColorBlend();
    cb.Positions = new[] { 0, 1 /15f, 2 / 15f, 3 / 15f, 4 / 15f, 5 / 15f, 6 / 15f, 7 / 15f, 8 / 15f, 9 / 15f, 10 / 15f, 11 / 15f, 12 / 15f, 13 / 15f,1 };

    cb.Colors = new[] {
        Color.FromArgb(255, 0, 0, 0),
        Color.FromArgb(255, 0, 0, 50),
        Color.FromArgb(255, 10, 10, 100),
        Color.FromArgb(255, 30, 30, 100),
        Color.FromArgb(255, 70, 70,200),
        Color.FromArgb(255, 100, 100, 255),
        Color.FromArgb(255, 170, 170, 255),
        Color.FromArgb(255, 55, 151, 107),
        Color.FromArgb(255, 117, 194, 103),
        Color.FromArgb(255, 230, 230, 128),
        Color.FromArgb(255, 202, 157, 75),
        Color.FromArgb(255, 185, 154, 100),
        Color.FromArgb(255, 220, 220, 220),
        Color.FromArgb(255, 255, 255, 255),
        Color.FromArgb(255, 100, 100, 200) };

    br.InterpolationColors = cb;
    // rotate
    br.RotateTransform(90);
    // paint
    g.FillRectangle(br, this.ClientRectangle);
}

不幸的是它没有显示所有颜色。我的矩形高度为100,但它显示的是这样的渐变:

Picture of gradient

有什么问题,我该如何解决?

1 个答案:

答案 0 :(得分:3)

如果要填充矩形垂直,则应在LinearGradientBrush的构造函数中指定旋转:

new LinearGradientBrush(this.ClientRectangle, colorFrom, colorTo, 90, false);
                                                           Here --^

删除转化

br.RotateTransform(90);

由于ClientRectangle的宽度和高度基本上由当前实现交换(因为旋转90°),因此您只能看到渐变的一小部分或整个渐变多次。

这也不起作用,因为您使用了错误的ClientRectangle。您在表单的代码隐藏中使用this.ClientRectangle。将每this.ClientRectangle替换为panel1.ClientRectangle

这看起来应该如何:

enter image description here

未经修改的代码如何显示:

enter image description here