c# GDI+绘图能不能绘制double类型的点
和用什么语言没关系,数码都是离散的,所以取得的坐标数据全部是整数,实际上浮点数也是由离散的内存位"模拟"的,关于浮点数存储是另一个话题,你可以百度了解下浮点数的内存存储格式,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中就是这样映射的.编辑-首选项-单位与标尺中就有这个参数设置,如图:
分两个参数,一个用于打印输出的,一个是对应屏幕的,其中的英寸(可选)是实际长度单位.
可见,你要实现类似CAD那样操作浮点数的坐标或长度,你的程序必须提供一个转换模块,希望能帮到你.
gdi+没有双精浮点的绘图函数 就算有作用也不大 位图不可能太大 一般的缩放查看图之类的只是取局部内容放大 而不是整体 超出可视区域的一般不绘制
public void DrawRectangle (System.Drawing.Pen pen, float x, float y, float width, float height);