GDI绘图的一些问题

mznxbc123456 2013-12-05 04:21:15
大侠们 小弟最近画了一个仪表盘 外观的圆圈就是DrawEllipse画出来的
现在希望圆圈的颜色分成3部分,黑色,绿色和红色,还要掌握好弧度,不知道大侠们有没有好的办法,小弟很感激啊!
...全文
239 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
智商余额不足 2013-12-06
  • 打赏
  • 举报
回复


Paint:

void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias;

GraphicsPath path = new GraphicsPath();
path.Reset();
path.AddArc(50, 50, 200, 200, 150, angle + 1);
g.DrawPath(new Pen(Color.Red, 50f), path);

path.Reset();
path.AddArc(50, 50, 200, 200, 150 + angle, 240 - angle + 2);
g.DrawPath(new Pen(Color.Gray, 50f), path);

path.Reset();
path.AddArc(50, 50, 200, 200, 30, 120 + 1);
g.DrawPath(new Pen(Color.Green, 50f), path);

float x = (float)Math.Cos((angle + 150) * Math.PI / 180) * 150 + 150;
float y = (float)Math.Sin((angle + 150) * Math.PI / 180) * 150 + 150;
path.Reset();
path.AddLine(x, y, 150, 150);
Pen pen = new Pen(Color.Blue, 10f);
pen.StartCap = LineCap.ArrowAnchor;
g.DrawPath(pen, path);
pen.Dispose();

path.Dispose();
}

timer:

private Timer timer;
int angle = 0;
void DrawArc()
{
angle++;
if (angle >= 240) angle = 0;
this.Invalidate();
}
void timer_Tick(object sender, EventArgs e)
{
DrawArc();
}

可以提取一个方法出来就方便用了
卧_槽 2013-12-06
  • 打赏
  • 举报
回复
引用 8 楼 u012592437 的回复:
[quote=引用 7 楼 yuwenge 的回复:] [quote=引用 6 楼 u012592437 的回复:] [quote=引用 5 楼 u012291758 的回复:] [quote=引用 3 楼 yuwenge 的回复:] 用ps画好,做成png贴上去就行了。
好办法,其实很多时候有简单的方法,没必要秀技术[/quote] 使用Png会遇到问题:这一部分不会根据用户的设置来变更显示效果,因为它是死的。 另外,你用什么精度的Png合适?如果仪表盘需要适应缩放的话。 所以,有可能,还是使用矢量的技术。 另外,使用GraphicsPath并不复杂。[/quote] 一张足够大的png就好了。难道你准备让你的仪表盘全屏展示? GDI+当然能做,但是不会画的很漂亮,把时间耗在这上面,木有什么意义。[/quote] 呃。是这样:一些仪表盘,红、黄、绿的分区是动态的。 因此,需要动态地调整这些区域的起始角度和范围。 如果用Png处理渲染也是可以的。例如,使用矢量绘制纯色的圆环,再叠加带有光泽渲染的Png的“表蒙子”。 所以,要制作专业的仪表盘组件,必要的矢量绘图技术我仍然认为是必要的。[/quote] 那就画圆弧好了,线条设置粗一点就行了。要么就画path,然后填充颜色。 这东西,基本上就是画同心圆,脑子清醒,把初中数学捡起来就问题不大了。
11000000 2013-12-05
  • 打赏
  • 举报
回复
4楼方法可行啊,只要是闭合的形状,都方便填充颜色
capricciosoft 2013-12-05
  • 打赏
  • 举报
回复
引用 7 楼 yuwenge 的回复:
[quote=引用 6 楼 u012592437 的回复:] [quote=引用 5 楼 u012291758 的回复:] [quote=引用 3 楼 yuwenge 的回复:] 用ps画好,做成png贴上去就行了。
好办法,其实很多时候有简单的方法,没必要秀技术[/quote] 使用Png会遇到问题:这一部分不会根据用户的设置来变更显示效果,因为它是死的。 另外,你用什么精度的Png合适?如果仪表盘需要适应缩放的话。 所以,有可能,还是使用矢量的技术。 另外,使用GraphicsPath并不复杂。[/quote] 一张足够大的png就好了。难道你准备让你的仪表盘全屏展示? GDI+当然能做,但是不会画的很漂亮,把时间耗在这上面,木有什么意义。[/quote] 呃。是这样:一些仪表盘,红、黄、绿的分区是动态的。 因此,需要动态地调整这些区域的起始角度和范围。 如果用Png处理渲染也是可以的。例如,使用矢量绘制纯色的圆环,再叠加带有光泽渲染的Png的“表蒙子”。 所以,要制作专业的仪表盘组件,必要的矢量绘图技术我仍然认为是必要的。
卧_槽 2013-12-05
  • 打赏
  • 举报
回复
引用 6 楼 u012592437 的回复:
[quote=引用 5 楼 u012291758 的回复:] [quote=引用 3 楼 yuwenge 的回复:] 用ps画好,做成png贴上去就行了。
好办法,其实很多时候有简单的方法,没必要秀技术[/quote] 使用Png会遇到问题:这一部分不会根据用户的设置来变更显示效果,因为它是死的。 另外,你用什么精度的Png合适?如果仪表盘需要适应缩放的话。 所以,有可能,还是使用矢量的技术。 另外,使用GraphicsPath并不复杂。[/quote] 一张足够大的png就好了。难道你准备让你的仪表盘全屏展示? GDI+当然能做,但是不会画的很漂亮,把时间耗在这上面,木有什么意义。
capricciosoft 2013-12-05
  • 打赏
  • 举报
回复
引用 5 楼 u012291758 的回复:
[quote=引用 3 楼 yuwenge 的回复:] 用ps画好,做成png贴上去就行了。
好办法,其实很多时候有简单的方法,没必要秀技术[/quote] 使用Png会遇到问题:这一部分不会根据用户的设置来变更显示效果,因为它是死的。 另外,你用什么精度的Png合适?如果仪表盘需要适应缩放的话。 所以,有可能,还是使用矢量的技术。 另外,使用GraphicsPath并不复杂。
算法大牛 2013-12-05
  • 打赏
  • 举报
回复
引用 3 楼 yuwenge 的回复:
用ps画好,做成png贴上去就行了。
好办法,其实很多时候有简单的方法,没必要秀技术
capricciosoft 2013-12-05
  • 打赏
  • 举报
回复
使用路径创建复杂的形状,比如你需要的那个圆环的一部分。 e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath(); path.AddArc(50, 50, 200, 200,-150,120);//第一条弧线,从左向右 path.AddArc(70, 70, 160, 160, -30, -120);//第二条弧线,从右向左 path.CloseAllFigures();//关闭路径,得到一个带有起止范围的“圆环” e.Graphics.FillPath(new SolidBrush(Color.Red), path);
卧_槽 2013-12-05
  • 打赏
  • 举报
回复
用ps画好,做成png贴上去就行了。
bdmh 2013-12-05
  • 打赏
  • 举报
回复
绘制三个圆,小的盖住大的,就形成你的样子了
智商余额不足 2013-12-05
  • 打赏
  • 举报
回复
先用绘图工具画好直接贴图片

110,535

社区成员

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

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

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