我正在努力维护一个使用SharpDX进行图形操作的遗留代码。部分代码采用锯齿形图案,并使其模糊,从而为撕碎的纸张创建锯齿边缘效果。我们遇到了一个奇怪的错误,其中有一个微弱的白线围绕效果。通过代码,我发现显然模糊操作是在边缘周围创建一个小的透明边框。如何修改SharpDX高斯模糊操作以使边缘不透明?
这里是用于定义模糊类别的代码:
public class DXEffectBlur : DXEffect
{
public DXEffectBlur(DXSurface Owner, DXImage Source0, float Sigma)
: base(Owner)
{
szPixels = Source0.SizePixels;
SharpDX.Direct2D1.Effects.GaussianBlur blur = new SharpDX.Direct2D1.Effects.GaussianBlur(surface.CurrentRender);
blur.StandardDeviation = Sigma;
blur.SetInput(0, Source0.Image, true);
blur.Optimization = GaussianBlurOptimization.Quality;
blur.BorderMode = BorderMode.Hard;
effect = blur;
}
}
的模糊被在下面的代码块援引为模糊写出到表面的作用:
using (SurfaceSupport ss = new SurfaceSupport(surface, ReadSource, true))
using (DXEffectBlur blur = new DXEffectBlur(surface, ss.Image, Sigma))
using (DXEffectUnPremultiply unmul = new DXEffectUnPremultiply(surface, blur))
using (DXLayer layer = new DXLayer(surface, rc, null, false, ss.Mask, 1F))
{
surface.DrawImage(unmul, rc, 1F);
}
其中rc是覆盖我们表面的矩形,1F是不透明度。
有没有更好的方法来指定SharpDX中的模糊,使它不会使边缘半透明?我将继续关注代码,但我今天花了一个小时,并且我对SharpDX甚至DirectX都不熟悉,所以我会很感激任何关于在哪里寻找的指针。我已经尝试了边框模式,默认为Soft,但在模糊中设置为Hard,但Soft只是为了更宽的边框透明度。