【问题标题】:How to paint a precise Gradient with LinearGradientBrush in C#?如何在 C# 中使用 LinearGradientBrush 绘制精确的渐变?
【发布时间】:2010-11-27 20:20:31
【问题描述】:

我正在使用 GDI 在 C# 中绘制这个对象,我需要进行精确的像素绘制。但是,这不起作用...我不知道这是否重要,但我正在绘制的对象是 ToolStrip,我正在执行自定义 ToolStrip 渲染。

我在 y 像素 1 处画了一条蓝色水平线,在 y 像素 2 处画了一条黄色线,在 y 像素 3 处画了一条红色线。这些不是真实的颜色,只是为了让我看得更清楚。

像这样:

Color cTop1 = Color.FromArgb(255, Color.Blue);
Color cTop2 = Color.FromArgb(255, Color.Yellow);
Color cTop3 = Color.FromArgb(255, Color.Red);

g.DrawLine(new Pen(cTop1), 0, 1, aBounds.Width, 1);
g.DrawLine(new Pen(cTop2), 0, 2, aBounds.Width, 2);
g.DrawLine(new Pen(cTop3), 0, 3, aBounds.Width, 3);

然后,在 y 像素 4 处,我开始使用 LinearGradientBrush 填充一个矩形,如下所示:

Rectangle rTop = new Rectangle(0, 3, aBounds.Width, (aBounds.Height / 2) - 4);

Color cTop = Color.FromArgb(245, Color.White);
Color cBottom = Color.FromArgb(222, Color.White);

LinearGradientBrush tGradient = new LinearGradientBrush(rTop, cTop, cBottom, LinearGradientMode.Vertical);
g.FillRectangle(tGradient, rTop);

问题是渐变画在红线上方。蓝色和黄色的都可以,但是红线,应该是RGB=255,0,0,其实是RGB=255,111,111。

我不明白为什么...我在 SmoothingMode、InterpolationMode、CompositionMode、CompositionQuality 中玩过,但我就是无法正确...

有什么想法吗?

【问题讨论】:

    标签: c# gdi+ smoothing lineargradientbrush


    【解决方案1】:

    有可能是刷子被包裹了,你看到的是相反的颜色“流血”了。

    尝试将 wrapmode 设置为

    brush.WrapMode = Drawing2D.WrapMode.TileFlipXY
    

    【讨论】:

    • 实际上,它确实有效,但我有这行“g.SmoothingMode = SmoothingMode.AntiAlias;”并需要将其删除。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2010-11-27
    • 2014-10-22
    • 2021-12-22
    • 1970-01-01
    • 2014-10-14
    • 2011-05-11
    • 2014-01-20
    • 2015-01-10
    相关资源
    最近更新 更多