C# PathGradientBrush 填充矩形问题???

gzkdev 2009-05-18 12:29:46
如题:
怎么解决当填充矩形的长和宽不一样时,PathGradientBrush 渐变宽度也不一样的问题.
就象PS里加的渐变边框一样.四周都是一样大小的.

代码如下:


private void DrawPeiRect(Graphics g, RectangleF rect)
{
//生成一个圆角矩形渐变画刷
PathGradientBrush pb = new PathGradientBrush(GetFilletRect(rect, 20f, 20f, 20f, 20f));

//从外到内渐变颜色
Color[] colors =
{
Color.FromArgb(120, 247, 190, 247),
Color.FromArgb(255, 249, 195, 247),
Color.FromArgb(255, 249, 238, 247),
Color.FromArgb(255, 249, 238, 247),
};

//从内到外渐变位置百分比
float[] relativePositions =
{
0f,
0.03f,
0.15f,
1f,
};

ColorBlend colorBlend = new ColorBlend();
colorBlend.Colors = colors;
colorBlend.Positions = relativePositions;

pb.InterpolationColors = colorBlend;

//去圆角毛刺
g.SmoothingMode = SmoothingMode.HighQuality;


g.FillPath(pb, GetFilletRect(rect, 20f, 20f, 20f, 20f));
}

private GraphicsPath GetFilletRect(RectangleF r, float r1, float r2, float r3, float r4)
{
float x = r.X, y = r.Y, w = r.Width, h = r.Height;
GraphicsPath rr = new GraphicsPath();
rr.AddBezier(x, y + r1, x, y, x + r1, y, x + r1, y);
rr.AddLine(x + r1, y, x + w - r2, y);
rr.AddBezier(x + w - r2, y, x + w, y, x + w, y + r2, x + w, y + r2);
rr.AddLine(x + w, y + r2, x + w, y + h - r3);
rr.AddBezier(x + w, y + h - r3, x + w, y + h, x + w - r3, y + h, x + w - r3, y + h);
rr.AddLine(x + w - r3, y + h, x + r4, y + h);
rr.AddBezier(x + r4, y + h, x, y + h, x, y + h - r4, x, y + h - r4);
rr.AddLine(x, y + h - r4, x, y + r1);
return rr;
}
...全文
571 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Error_Code 2009-06-10
  • 打赏
  • 举报
回复
你要在控件上画 能得到控件大小就能让你的渐变padding一下
gzkdev 2009-06-10
  • 打赏
  • 举报
回复
up
gzkdev 2009-06-10
  • 打赏
  • 举报
回复
margin padding 是控制 控件的外边距和内边距的,在GDI上没有地。

WPF当像好做了。这个项目要是能用WPF就好了。
gzkdev 2009-06-10
  • 打赏
  • 举报
回复
up
Error_Code 2009-06-10
  • 打赏
  • 举报
回复
winform可能要margin padding什么的 应该可以让四周宽度一致 不过你这个效果在wpf里很简单
gzkdev 2009-06-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 Error_Code 的回复:]
渐变位置是按百分比的 所以宽度不一样的话 开始渐变的位置肯定不一样
LZ在borderBrush里渐变试试看?
[/Quote]

我知道是按百分比渐变的。就是不知怎样能做的四周都一样的渐变宽度呀。


BorderBrush?? WPF里的吗?

我这是WinForm呀。
Error_Code 2009-06-10
  • 打赏
  • 举报
回复
渐变位置是按百分比的 所以宽度不一样的话 开始渐变的位置肯定不一样
LZ在borderBrush里渐变试试看?
gzkdev 2009-06-10
  • 打赏
  • 举报
回复
up
milan-blacksmith- 2009-05-19
  • 打赏
  • 举报
回复
帮顶~
zgke 2009-05-18
  • 打赏
  • 举报
回复
重新发一下图把.
liyoubaidu 2009-05-18
  • 打赏
  • 举报
回复
up
gzkdev 2009-05-18
  • 打赏
  • 举报
回复

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧