c# 中GDI+ 绘图时坐标Point 与PointF讨论
最近做一个项目,需要实时绘制曲线,X轴为时间轴,在时间轴上显示实时时间;由于曲线是实时更新的,会由右向左移动;但是程序运行后,发现曲线有抖动,X轴上显示的时间值也有抖动(只是前后抖动);
进过检查发现是每个坐标(Location)的问题,我用PointF作为坐标点,但问题来了:
用graphics.drawLine或graphics.drawstring画图时,对PointF会进行取整,例如 PointF(10.3f,20.0f),画到bitmap上就变成了Point(10,20);
这个我做过一些测试:例如画两条竖线 -
line01 (Point(0,0),Point(0,50))
line02(PointF(0.7f,50.0f),Point(0.7f,100.0f))
理论上这两条竖线在X坐标轴上只差0.7个像素(我设置的graphics的画图单位为Pixel)。但实际画到bitmap上时,这两条竖线在X方向上差了1个像素。
又例如:
line01 (Point(0,0),Point(0,50))
line02(PointF(0.2f,50.0f),Point(0.2f,100.0f))
画到bitmap上时,这两条竖线在X方向没有偏差。0.2f四舍五入变成了0.0f;
我想这就是抖动的原因:例如一个时间坐标“a”显示在X轴上,其X坐标会随时而改变,对其X坐标的算法是: 当前获得的时间减去a的时间值,再转换成毫秒值b,再将b转换成X轴的坐标值;最后的结果是一个float型数值,可是GDI+在画图时,对这个数值进行了取整操作。如下图:当程序运行后,这些时间值会向左移动,但是移动时会前后抖动。

请问有没有办法可以使GDI+ 绘图时保证能完全按照PointF指定的坐标点绘制,而不进行取整运算。
或者是其他的办法,来保证画图效果? DirectX2D可以做到吗?不太懂DirectX2D...
进过检查发现是每个坐标(Location)的问题,我用PointF作为坐标点,但问题来了:
用graphics.drawLine或graphics.drawstring画图时,对PointF会进行取整,例如 PointF(10.3f,20.0f),画到bitmap上就变成了Point(10,20);
这个我做过一些测试:例如画两条竖线 -
line01 (Point(0,0),Point(0,50))
line02(PointF(0.7f,50.0f),Point(0.7f,100.0f))
理论上这两条竖线在X坐标轴上只差0.7个像素(我设置的graphics的画图单位为Pixel)。但实际画到bitmap上时,这两条竖线在X方向上差了1个像素。
又例如:
line01 (Point(0,0),Point(0,50))
line02(PointF(0.2f,50.0f),Point(0.2f,100.0f))
画到bitmap上时,这两条竖线在X方向没有偏差。0.2f四舍五入变成了0.0f;
我想这就是抖动的原因:例如一个时间坐标“a”显示在X轴上,其X坐标会随时而改变,对其X坐标的算法是: 当前获得的时间减去a的时间值,再转换成毫秒值b,再将b转换成X轴的坐标值;最后的结果是一个float型数值,可是GDI+在画图时,对这个数值进行了取整操作。如下图:当程序运行后,这些时间值会向左移动,但是移动时会前后抖动。

请问有没有办法可以使GDI+ 绘图时保证能完全按照PointF指定的坐标点绘制,而不进行取整运算。
或者是其他的办法,来保证画图效果? DirectX2D可以做到吗?不太懂DirectX2D...
...全文
相关推荐
C# 模拟钟表
C# 模拟钟表
C# GDI+ 滚动波形 折线绘图 动态波形
开发平台:vs2008 c# 知识:GDI+ 采用随机数绘图,可以自定义标题的颜色,文字,绘图坐标的颜色,绘图点文字的颜色……,只是为GDI+初学者提供一点思路,程序在vs2008下调试通过~~
C# GDI+操作图像放大缩小,仿射变换等DEMO
C# GDI+操作图像放大缩小,仿射变换等DEMO
C#使用GDI+绘图的例子,附源码
C#使用GDI+绘图的例子,附源码,绘图效果如上图所示。研究一下GDI+吧,下载参考一下。
C# GDI 绘图 实例 源代码 对初学者很有帮助
C# GDI 绘图 实例 源代码 对初学者很有帮助


