En WPF OuterGlowBitmapEffect ya no es admitido ni representado por Net4.0. DropShadow tiene un poco en común y no es aceptable en mi caso. Mi objetivo inicial es crear un fondo blanco borroso para el texto ClearType negro en la ventana de AeroGlass para que sea más legible en las escenas oscuras. Empecé a jugar con fx y HLSL. Es bastante interesante y potente, pero todavía no puedo acercarme a OuterGlowBitmapEffect.Cómo hacer un efecto de resplandor exterior usando HLSL?
Mi versión ficticia actual que refleja la idea:
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;
}
Por cierto: ¿Puedo obtener una fuente de HLSL DropShadowEffect usarlo como referencia? ¿Puede alguien señalarme un algoritmo OuterGlowEffect en cualquier idioma?
NOTA: la barra de título Windows Glass Aero Glass tiene tal efecto para hacer que el título sea más legible. Eso es exactamente lo que me gustaría tener para mi texto en otras partes de la ventana (DwmExtendFrameIntoClientArea aplicado)
¡Suena genial! Pero en general es imposible tener un sombreador de múltiples pasos para WPF BitmapEffect :(hay algunos consejos y descripciones: http://www.codeproject.com/Articles/71617/Getting-Started-with-Shader-Effects-in-WPF Por ahora, el rendimiento no es un problema ya que tiene una pequeña cantidad de texto y una pequeña cantidad de mapas de bits para representar. Sería genial si puede ayudar a crear una función de paso único para representar texto con fondo borroso. –
no tiene para crear un sombreador de varias pasadas, lo que debes hacer es: 1. difumina la imagen original con 'PS_BlurHorizontal', 2. difumina el resultado del paso anterior con' PS_BlurVertical'. si necesitas un pase único, toma un vistazo a esto: http://code.google.com/p/sbip/source/browse/trunk/SBIPFramework/Resources/GaussianBlur.fx?r=76 – miloszmaki