【问题标题】:Can a Pen or Brush paint a Point?钢笔或画笔可以画一个点吗?
【发布时间】:2014-04-01 02:17:25
【问题描述】:

我知道我可以画一个实心圆,我可以用 Graphics 画很多简单和复杂的东西。但是我不能让它画一个点(不是一个像素)。

我正在玩一个画图程序,用户可以画得很好,但不能画一个点。我可以添加一个非常接近的虚拟点,或者可以绘制一个实心圆,但有时我会错过明显的。

那么有没有办法用给定的画笔或钢笔画一个点

不,我当然不是要画一个像素。我想使用颜色和宽度等属性。就像一个只有一个点或两个相同点的 DrawLine。但这没有任何效果。

【问题讨论】:

  • 你能张贴你的意思的截图吗?
  • 这应该没有必要。想象一条粗线,现在让它越来越短。更短,而不是更薄。当它减少到一个点时,它看起来像..嗯,它应该看起来像一个端点,甚至不一定是一个圆。
  • 你的世界中单点和单像素有什么区别?
  • 点是一种几何构造,如线或圆。当您绘制它时,您使用诸如笔或具有特定宽度和颜色的画笔之类的工具,并为您的绘图表面添加颜色。这里的表面由像素组成。如果我的笔的宽度为 1,那么该点确实只有一个像素宽,但是,正如我在 OP 中所写,我想使用给定宽度的给定 Pen。
  • 叹息。我必须有一个非常糟糕的一天表达自己。我错过了 Graphics.DrawPoint(Pen, Point) 方法。但是,嘿,我可以自己写一个,非常感谢你..

标签: c# winforms point brush pen


【解决方案1】:
    public void DrawPoint(Graphics G, Pen pen, Point point)
    {
        // add more LineCaps as needed..
        int pw2 = (int ) Math.Max(1, pen.Width / 2);
        using(var brush = new SolidBrush(pen.Color))
        {
            if (pen.EndCap == LineCap.Square)
                G.FillRectangle(brush, point.X - pw2, point.Y - pw2, pen.Width, pen.Width);
            else
                G.FillEllipse(brush, point.X - pw2, point.Y - pw2, pen.Width, pen.Width);
        }
    }

【讨论】:

  • 我会将代码封装到using(var brush = new SolidBrush(){ ... } 语句中以避免内存泄漏。
  • 我编辑了代码,以表明我的意思。你几乎拥有它!
猜你喜欢
  • 2010-09-30
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多