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绘图时,线宽是一个非常重要的参数,绝对马虎不得,绘制界面时,还应详细考虑。
- Direct2D 及 WPF手动绘图中的线宽问题
- Direct2D中的坐标变换
- Direct2D中的坐标变换
- Direct2D中的坐标变换
- Direct2D中的IWICBitmap接口
- Direct2D中的DirectWrite
- php 绘图中的问题
- WPF绘图
- 正交投影的DIRECT2D绘图基础部分
- Direct2D中的2D显示
- Direct2D在VC中的使用
- MFC中的窗口绘图问题
- python中的matplotlib绘图问题
- Direct2d绘制图片的问题
- Direct2d绘制图片的问题
- WPF-13:资源文件需要手动引用问题
- WPF项目中的问题归档
- WPF绘图代码
- 流年似水,俗缘成殇
- JAVA反射机制作用是什么
- Android开发环境搭建
- 4K视频源
- 关于自定义迭代器类出现的问题可能解决方案
- Direct2D 及 WPF手动绘图中的线宽问题
- 命令行执行Java程序加载指定目录中的Jar文件
- 营销工具的智慧
- 【PAT 1034】 Head of a Gang 图论DFS
- java web注册实现邮箱验证
- CocoaPods安装和使用教程
- 近段时间处理JT809大量数据方式
- 第1章 述与环境搭建
- 1子级div margin属性影响父级div margin属性