2014-09-28 77 views
1

我正在畫布上繪製圖像。如果我繪製的圖像沒有任何效果,它渲染罰款。如果我添加自定義色相效果,則在渲染畫布時會出現一些奇怪的結果。我不知道這個問題是否來自我的着色器,或者如果它是我渲染它的方式。效果呈現圖像

enter image description here

在底部是沒有效果。頂部是效果。

下面是HLSL着色:

float HueDegree : register(C0); 

sampler2D Samp : register(S0); 

float3x3 QuaternionToMatrix(float4 quat) 
{ 
    float3 cross = quat.yzx * quat.zxy; 
    float3 square = quat.xyz * quat.xyz; 
    float3 wimag = quat.w * quat.xyz; 

    square = square.xyz + square.yzx; 

    float3 diag = 0.5 - square; 
    float3 a = (cross + wimag); 
    float3 b = (cross - wimag); 

    return float3x3(
    2.0 * float3(diag.x, b.z, a.y), 
    2.0 * float3(a.z, diag.y, b.x), 
    2.0 * float3(b.y, a.x, diag.z)); 
} 

static const float3 lumCoeff = float3(0.2125, 0.7154, 0.0721); 

float4 main(float2 uv : TEXCOORD) : COLOR 
{ 
    float4 outputColor = tex2D(Samp, uv.xy); 
    outputColor.rgb /= outputColor.a; 

    float3 root3 = float3(0.57735, 0.57735, 0.57735); 
    float half_angle = 0.5 * radians(HueDegree); // 0 to 360 degree 
    float4 rot_quat = float4((root3 * sin(half_angle)), cos(half_angle)); 
    float3x3 rot_Matrix = QuaternionToMatrix(rot_quat); 

    outputColor.rgb = mul(rot_Matrix, outputColor.rgb); 

    outputColor.rgb *= outputColor.a; 

    return outputColor; 
} 

這裏是怎麼了使其:

Rect rect = new Rect(0, 0, tmpCanvas.Width, tmpCanvas.Height); 

RenderTargetBitmap rtb = new RenderTargetBitmap((int)rect.Right, 
(int)rect.Bottom, 96d, 96d, System.Windows.Media.PixelFormats.Default); 
rtb.Render(tmpCanvas); 

如果我繪製的圖像與它看起來很好的畫布上的影響。只有在我呈現畫布之前,纔會出現問題。我已經渲染了所有我的視覺效果,我還有其他的自定義效果,並且效果很好。我無法弄清楚。如果我從着色器中刪除

outputColor.rgb /= outputColor.a; 
... 
outputColor.rgb *= outputColor.a; 

,那麼我不拿到白色背景的問題,但我還是拿到鋸齒邊緣。

+0

我沒有意識到這是C#... – Anton 2014-09-28 08:43:11

回答

0

試試這個:

rect.Effect = new BlurEffect() { Radius = 0 }; 
rect.Effect.BeginAnimation(BlurEffect.RadiusProperty, new DoubleAnimation(5, TimeSpan.FromMilliseconds(500))); 
rect.Effect.BeginAnimation(BlurEffect.RadiusProperty, new DoubleAnimation(0, TimeSpan.FromMilliseconds(500)));