グラフィック操作に 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;
}
}
ぼかしは、次のコード チャンクで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にも慣れていないので、どこを見ればよいか教えていただければ幸いです. 私はすでに、BorderMode をいじってみました。デフォルトは Soft ですが、ぼかしでは Hard に設定されますが、Soft は透明度の境界線を広げます。