在WPF中,Net4.0不再支持或渲染OuterGlowBitmapEffect。DropShadow与我的情况几乎没有共同点,也不可接受。我的初衷是为黑色ClearType文本在AeroGlass窗口上创建一个白色模糊的背景,以使其在暗场景中更易读。我开始尝试使用fx和HLSL。这非常有趣和强大,但我仍然无法接近OuterGlowBitmapEffect。
我的当前虚拟版本反映了这个想法:
sampler2D Sampler : register(S0);
#define PI 3.14f
float4 main(float2 uv : TEXCOORD) : COLOR
{
float4 px = tex2D(Sampler, uv);
/*
if (px.a > 0.9)
{
return px;
}
*/
const float d = 3;
int cnt = 0;
float a = 0;
for (float x = -0.1*d; x < 0.1*d; x += 0.05*d)
{
a += tex2D(Sampler, uv + float2(x, 0)).a;
a += tex2D(Sampler, uv + float2(0, x)).a;
a += tex2D(Sampler, uv + x).a;
cnt += 3;
}
a /= cnt;
float4 s = a;
float4 r = float4(px.rgb*px.a + s.rgb*(1-px.a), max(px.a, a));
return r;
}
顺便问一下:我能否获得一个HLSL源代码,以便将其用作参考?有人能指向任何语言中的OuterGlowEffect算法吗?
注意:Windows 7 Aero Glass标题栏具有此效果,使标题更易读!这正是我想在窗口其他部分的文本上拥有的效果(应用了DwmExtendFrameIntoClientArea)
PS_BlurHorizontal
模糊原始图像,PS_BlurVertical
进行模糊处理。