Direct2D 及 WPF手动绘图中的线宽问题

来源:互联网 发布:阿里云 nodejs 编辑:程序博客网 时间:2024/06/09 23:00

最近在用Direct2d 绘图时,常常遇到绘制直线颜色较浅较粗,不大好看,而WPF自己框架绘制出来的图却是非常的清晰,我用的是纯黑的画笔,线宽是1,绘制的五线谱,就显得更像灰色,感觉更粗一些,而这个五线谱控件的边框线宽设置的也是1,却显得非常清晰。


我将细节部分放大后看,又发现两线是一样的,这是什么原因呢?


原来,Direct2d绘图引擎,非常强调浮点绘图,所谓浮点绘图,就是允许用户在任意一个位置绘制,这个位置用double的浮点数表示,比如说我要绘制一个直线移动的动画,该直线1秒内移动了7个像素,如果不支持浮点绘图,绘制位置必须是整数的话,那这个动画必然会显得不连贯,因为本来应该有60帧,却只有7个可能的位置,就会发现跳动。如果斜方向移动,还会造成动画的锯齿状震动。

为了解决这个问题,使得动画平滑,采取了一种双线性插值法,对图形的各个点位置坐标重新计算,使其看起来位置是平滑的,(实际上几乎每个点都不会像原来一样,会通过色差控制变化)。

由于采取了这个算法,我写的点的位置是整数,于是画出的线会经过双线性差值算法处理,例如下图:


从(2,1)点画到(8,2),由于点的中心是整数,即使线宽是1,也要画两个像素,但颜色相应会变浅,试图使其“看起来像”1个宽度的。所以绘图时线宽也应被考虑进去,要在第2横排第3个像素上画,线宽是1时,可以简单的将坐标点横纵各加0.5,变为下图这样,就能显示的非常清晰。

修改后的绘图效果如下:


尚不知能否从绘图设置上修改,如有了解这方面的大神,还望不吝赐教。不过也可以见得,在Direct2D绘图时,线宽是一个非常重要的参数,绝对马虎不得,绘制界面时,还应详细考虑。


0 0
原创粉丝点击