我一直坚持这个问题几个小时但似乎无法取得进展。我正在尝试绘制一个矩形,如下所示
带有浅灰色边框线。我成功地绘制了灰色边框线矩形,但我无法填充矩形。 有9种颜色,我希望它们在我的矩形宽度上具有相同的空间。
我的代码如下所示
using (var gp = new GraphicsPath())
{
gp.AddRectangle(rect);
using (var pgb = new PathGradientBrush(gp))
{
var pos = new[] { 0f, .125f, .25f, .375f, .5f, .625f, .75f, .875f, 1f };
var b = new Blend
{
Positions = pos,
Factors = new[] { .125f, .125f, .125f, .125f, .125f, .125f, .125f, .125f, .125f }
};
var cb = new ColorBlend
{
Positions = pos,
Colors = new[]
{
Color.FromArgb(0, 0, 0),
Color.FromArgb(0, 0, 79),
Color.FromArgb(81, 0, 123),
Color.FromArgb(152, 0, 118),
Color.FromArgb(211, 0, 62),
Color.FromArgb(245, 31, 0),
Color.FromArgb(255, 175, 0),
Color.FromArgb(255, 255, 100),
Color.FromArgb(255, 255, 255),
}
};
pgb.Blend = b;
pgb.InterpolationColors = cb;
pgb.CenterPoint = new PointF(rect.Width / 2, rect.Height / 2);
pgb.FocusScales = new PointF(.5f, .5f);
bufferedGraphics.Graphics.FillPath(pgb, gp);
}
}
但这最终会产生 请忽略两个图形的不一致大小。
这可能吗?如果可以,我怎样才能改变我的方法来实现这个目标?
答案 0 :(得分:4)
不使用PathGradientBrush
,而是使用LinearGradientBrush
,因为您想在直线块中绘制颜色。而且(至少对我来说)更容易理解会发生什么。
我在框架2.0项目中尝试了以下代码,很抱歉删除了C#4.0语法。
using (LinearGradientBrush lgb = new LinearGradientBrush(rect, Color.Black, Color.White, 0f)) {
float[] pos = new float[] { 0f, .125f, .25f, .375f, .5f, .625f, .75f, .875f, 1f };
Blend b = new Blend();
b.Positions = pos;
b.Factors = new float[] { .125f, .125f, .125f, .125f, .125f, .125f, .125f, .125f, .125f };
ColorBlend cb = new ColorBlend();
cb.Positions = pos;
cb.Colors = new Color[] {
Color.FromArgb(0, 0, 0),
Color.FromArgb(0, 0, 79),
Color.FromArgb(81, 0, 123),
Color.FromArgb(152, 0, 118),
Color.FromArgb(211, 0, 62),
Color.FromArgb(245, 31, 0),
Color.FromArgb(255, 175, 0),
Color.FromArgb(255, 255, 100),
Color.FromArgb(255, 255, 255),
};
lgb.Blend = b;
lgb.InterpolationColors = cb;
e.Graphics.FillRectangle(lgb, rect);
}
结果: