1
2
问题的原因 亚像素形状在像素内使用alpha混合。不幸的是,没有alpha混合算法可以在邻接时实现矩形的无缝混合。 例如,如果:
每个矩形将涂成黑色,不透明度为50%。第一个将白色像素转换为灰色。第二个将其转换为深灰色,但不是黑色。如果这些矩形在相邻像素中继续为黑色,则会在黑色中看到深灰色像素。 两种解决方案 解决这个问题的一般方法有两种:
如何使用单个几何图形 如果只有一组矩形,则可以创建一个简单控件,该控件使用包含组合形状的单个路径几何图形绘制整个矩形集。为了说明这个想法,如果你有两个不同高度的矩形,像这样:
您可以使用这样的单一路径几何体渲染它:
实现这一点的一个实际方法是:
如果使用布局系统来定位矩形,则可以使用Adornerlayer,方法是为每个矩形创建一个修饰器,然后在渲染修饰器时,计算第一个矩形的组合路径并使其余矩形不可见。 上述假设很容易从源数据生成路径几何图形。对于更复杂的场景,可以对路径控件进行子类化,以搜索其父级的可视化树以查找指定的形状,并使用通用几何算法计算路径几何图形,该几何图形表示它们的并集,而不带任何额外的边。 如果矩形将具有多种颜色,则可以使用多个路径控件(每种颜色一个),或者可以构造一个图形对象并显示该对象。 以下是构建路径几何体的代码结构:
如何强制初始渲染为高分辨率 要强制以更高分辨率渲染,请执行以下操作:
请注意,通常情况下,wpf在使用viewBrush时能够以实际的分辨率进行渲染,但实际的图表实际显示在屏幕上的大小更大会欺骗它,但随后会被父控件剪裁,因此实际上不会看到太大的版本。 当然,这个问题不存在于renderTargetBitmap中,因为您指定了所需的分辨率,但是知道何时重新渲染位图可能很困难。如果只在数据更改时重新渲染,则可以使用事件,但如果希望任何视觉更改触发重新渲染,则更难。 |
2
1
Target 4.0, use layout rounding (带演示的博客帖子)。 |