我正在努力維護一個使用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只是爲了更寬的邊框透明度。