小编Ale*_*hik的帖子

应用着色器效果后模糊的图片

我在WPF中遇到了像素着色器的奇怪行为.

这个问题100%可重复,所以我写了一个小的演示程序.您可以在此处下载源代码.

万恶之源是名为MyFrameworkElement的小类:

internal sealed class MyFrameworkElement : FrameworkElement
{
    public double EndX
    {
        get
        {
            return (double)this.GetValue(MyFrameworkElement.EndXProperty);
        }
        set
        {
            this.SetValue(MyFrameworkElement.EndXProperty, value);
        }
    }

    public static readonly DependencyProperty EndXProperty =
        DependencyProperty.Register("EndX",
            typeof(double),
            typeof(MyFrameworkElement),
            new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.AffectsRender));

    protected override void OnRender(DrawingContext dc)
    {
        dc.DrawLine(new Pen(Brushes.Red, 2), new Point(0, 0), new Point(this.EndX, 100));
        dc.DrawLine(new Pen(Brushes.Green, 3), new Point(10, 300), new Point(200, 10));
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,此框架元素呈现2行:下面的行具有永久坐标,但上面的行依赖于EndX依赖项属性.

所以这个框架元素是像素着色器效果的目标.为简单起见,我使用此处的灰度着色器效果.所以我将GrayscaleEffect应用于MyFrameworkElement.你可以看到结果,看起来不错.

直到我大幅增加EndX属性.

小线模糊,大线很好!

但是如果我删除灰度效果,所有线条都会看起来应该如此.

任何人都可以解释这种模糊的原因是什么?或者甚至更好我如何解决这个问题?

c# wpf pixel-shader

5
推荐指数
1
解决办法
954
查看次数

标签 统计

c# ×1

pixel-shader ×1

wpf ×1