繁体   English   中英

Windows窗体中用于绘制的C#双精度坐标

[英]C# double precision coordinates for drawing in Windows Form

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

我想问“你能有双座标吗?”,我的意思是“画到屏幕上时可以比像素更深吗?”,

而且,“ Windows是制作简单图形应用程序(例如简单的Doodle Jump游戏)的最佳方法吗?”

但这很简单。 问题是,我需要在Windows窗体上绘制一些简单的对象(点,线,尤其是矩形),其精度为double / float / decimal精度(没关系,比整数精度更高) Visual Studio),但我找不到任何东西。

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

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

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

Graphics.DrawLine()和其他绘制方法采用单个精度坐标重载,可以是单个浮点数PointFRectangleF结构的形式

但是,结果可能因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进行插值的放大结果:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM