【问题标题】:C# double precision coordinates for drawing in Windows Form用于在 Windows 窗体中绘图的 C# 双精度坐标
【发布时间】:2017-01-02 00:52:22
【问题描述】:

首先我是 C# 新手,我一直使用 Java。首先,

我想问“你能有双坐标吗?”,我的意思是“当你在屏幕上绘制时,你能比像素更深吗?”,

还有,“Windows 形式是制作简单图形应用程序(如简单的涂鸦跳跃游戏)的最佳方式吗?”

但这只是单纯的好奇。问题是,我需要在 Windows 窗体上以双精度/浮点/小数精度​​(没关系,比整数更精确)绘制一些简单的对象(点、线,尤其是矩形)(我正在使用Visual Studio),但我找不到任何东西。

我见过 Pointf 或 RectangleF 等,但我不确定它们是否用于此目的。我还看到 Rect (System.Windows.Shapes) 使用双精度,但不能用于 Windows 窗体(我不确定,但如果可能的话,我想找到在 Windows 窗体上执行此操作的最简单方法)。

希望我已经足够清楚了,在此先感谢。

【问题讨论】:

  • 如果你想让游戏统一而不是winforms。
  • 大多数 GDI+ 方法都有 single 坐标的精度重载。但是,如果 SmoothingMode 未设置为例如,像素位置将被四舍五入。 `高品质。请把你的问题说得更清楚。我不知道你想达到什么目的。
  • 你有什么理由不使用 WPF 吗?

标签: c# graphics coordinates windows-forms-designer


【解决方案1】:

正如我在评论中指出的那样,也许这就是您所需要的。

Graphics.DrawLine() 和其他绘图方法采用单精度坐标的重载,形式为individual floatsPointF, RectangleF structures

结果可能因SmoothingMode 而异。

例如:

using (var bmp = new Bitmap(100, 100))
{
    using (var g = Graphics.FromImage(bmp))
    {
        //Note that this enabled anti-aliasing
        g.SmoothingMode = SmoothingMode.HighQuality;

        g.Clear(Color.White);
        float x = 20.0f;
        float y1 = 1.0f;
        float y2 = 10.0f;
        g.DrawLine(Pens.Red, x, y1, x, y2);
        x = 20.5f;
        y1 = 11.0f;
        y2 = 20.0f;
        g.DrawLine(Pens.Red, x, y1, x, y2);
        x = 21.0f;
        y1 = 21.0f;
        y2 = 30.0f;
        g.DrawLine(Pens.Red, x, y1, x, y2);
    }
}

这里,线实际上是在两个坐标之间插入强度。如果SmoothingMode 保留默认值,则该行将正好为 1 像素宽并四舍五入到最接近的像素。您应该测试并选择最适合您的图形的方法。

这是使用SmoothingMode.HighQuality 进行插值的放大结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 2013-05-23
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    相关资源
    最近更新 更多