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

我是这样操作的放一个picturebox在界面上然后在上面绘制线段,鼠标放在picturebox。读取鼠标的位置得到的总是整形的值,不能是double类型的嘛?还有就是G... 我是这样操作的 放一个picturebox在界面上 然后在上面绘制线段,鼠标放在picturebox。读取鼠标的位置 得到的总是整形的值,不能是double类型的嘛? 还有就是GDI+绘图好像不能绘制double类型的点, 不能搞成autocad一样的嘛 展开
 我来答
CodeBlove
2019-09-16 · TA获得超过3364个赞
知道小有建树答主
回答量:936
采纳率:79%
帮助的人:243万
展开全部

和用什么语言没关系,数码都是离散的,所以取得的坐标数据全部是整数,实际上浮点数也是由离散的内存位"模拟"的,关于浮点数存储是另一个话题,你可以百度了解下浮点数的内存存储格式,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那样操作浮点数的坐标或长度,你的程序必须提供一个转换模块,希望能帮到你.

三天打鱼N
2019-09-11 · TA获得超过1540个赞
知道大有可为答主
回答量:2032
采纳率:74%
帮助的人:598万
展开全部
屏幕坐标是整数的 位图像素位置也是整数的 不过你可以把坐标转为浮点 然后就可以缩放坐标画到位图上了
gdi+没有双精浮点的绘图函数 就算有作用也不大 位图不可能太大 一般的缩放查看图之类的只是取局部内容放大 而不是整体 超出可视区域的一般不绘制
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳光的雷咩咩
2019-09-11 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7796万
展开全部
有Float精度的方法,比如
public void DrawRectangle (System.Drawing.Pen pen, float x, float y, float width, float height);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式