c# GDI+绘图能不能绘制double类型的点

2025-03-22 14:12:44
推荐回答(3个)
回答(1):

和用什么语言没关系,数码都是离散的,所以取得的坐标数据全部是整数,实际上浮点数也是由离散的内存位"模拟"的,关于浮点数存储是另一个话题,你可以百度了解下浮点数的内存存储格式,float和double只是精度不同而已,原理一样的.

屏幕上不可能存在半个或者某0.XX个像素点,鼠标获得的位置都是像素的坐标值,你如果要实现CAD那样自然数的坐标,必须由你开发程序来实现转换.

举个简单例子:

下面这张图是我用EXCEL单元格来模拟屏幕像素的,每个小格代表一个屏幕像素,鼠标获得的是逻辑数据,即理论上的一个点没有实际物理意义,涂黑的部分代表一根直线,这根直线的长度为1.6,即你要的非整数,因此这里就需要一个转换关系或者叫做系数,我们要的是物理长度,比如厘米,而系统返回给我们的是像素单位,即单个发光点(RGB)为一个单位,设长度为L,像素P,系数为K,则 L=P*K.

理论上点是无大小的,但是显示器是有大小的,因此屏幕的尺寸基本决定了每个点(像素)的物理尺寸,实际上你先要定义一个系数,即多少个像素表示一个长度单位,然后取倒数即可.当然你也可以不用倒数,但是这样的话上述公式要用除法了,事实证明乘法比除法方便,降低误差.此例的关系要求是1:10,即10个像素组成一个长度单位,假设是厘米.由于10个像素表示1个长度单位,因此其系数为0.1,系数也即精度,也就是说,在此系统下,无法表示小于0.1的长度,因此我们通过鼠标获得的像素长度为16,所以L=16*0.1=1.6.

像素映射到物理长度单位

 事实上PHOTOSHOP中就是这样映射的.编辑-首选项-单位与标尺中就有这个参数设置,如图:

PHOTOSHOP中打印/屏幕分辨率设置

分两个参数,一个用于打印输出的,一个是对应屏幕的,其中的英寸(可选)是实际长度单位.

可见,你要实现类似CAD那样操作浮点数的坐标或长度,你的程序必须提供一个转换模块,希望能帮到你.

回答(2):

屏幕坐标是整数的 位图像素位置也是整数的 不过你可以把坐标转为浮点 然后就可以缩放坐标画到位图上了
gdi+没有双精浮点的绘图函数 就算有作用也不大 位图不可能太大 一般的缩放查看图之类的只是取局部内容放大 而不是整体 超出可视区域的一般不绘制

回答(3):

有Float精度的方法,比如
public void DrawRectangle (System.Drawing.Pen pen, float x, float y, float width, float height);