我正在维护一段使用 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 的 BorderMode,但在模糊中设置为 Hard,但 Soft 只是使透明度边界更宽。