关于我几周前问过的这个问题
LinearGradientBrush does not render correctly
请考虑以下代码:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Rectangle rect = new Rectangle(100, 100, 200, 100);
using(LinearGradientBrush brush = new LinearGradientBrush(rect, Color.Red, Color.Blue, 90))
{
using(Pen pen = new Pen(brush, 1))
{
pen.Alignment = PenAlignment.Inset;
e.Graphics.DrawRectangle(pen, rect);
}
}
}
产生这个结果......
为什么有一条红线应该有一条蓝线,我该如何解决?
Pen.Alignment = PenAlignment.Inset没有用!
答案 0 :(得分:3)
尝试使用较小的矩形笔:
section() (<MUL>|<DIV>|<MOD> section())* expr2()
答案 1 :(得分:1)
好的,总结一下:DrawRectangle
总是透支 1个像素(*),因此LinearGradientBrush
会以第1种颜色重新启动。
是的,Lars有一个解决方案,但这是一个有趣的选择:
brush.WrapMode = WrapMode.TileFlipXY;
这可以确保渐变在开始时不必重新绘制但在两个方向上反转,因此额外的像素以正确的颜色绘制而您不需要操纵一个两个Rectangle
尺寸..
好吧,如果你需要总精度,它可能是第二好的,因为最后一行和列将具有与它们的邻居相同的颜色。但是不必处理两种尺寸可能是值得的..
(*)这就是无法使用它来绘制1x1
平方/像素的原因。相反,您需要使用FillRectangle
..