2011-07-28 37 views
0

我正在使用WPFMediakit和我兩個單色相機我想要改變這些控件的色調。是否有可能單獨對wpf控件進行色調處理?WPF用戶控件色調級別

回答

1

您可以在灰度圖像上使用的一種簡單方法是將半透明矩形放在要着色的控件的上方。該方法具有以下方法沒有的限制。

e.g進行着色的藍色

<Grid> 
    <Image Source="C:\Windows\Web\Wallpaper\img1.jpg" /> 
    <Rectangle Fill="#86004EFF" /> 
</Grid> 

灰沒有飽和度改變的灰度圖像的色調不會做任何事情,就像this one色調轉變將不會幫助你。

/// <summary>Hue</summary> 
/// <minValue>0</minValue> 
/// <maxValue>1</maxValue> 
/// <defaultValue>0</defaultValue> 
float Hue : register(c0); 

/// <summary>Saturation</summary> 
/// <minValue>0</minValue> 
/// <maxValue>1</maxValue> 
/// <defaultValue>0</defaultValue> 
float Saturation : register(c1); 

sampler2D Samp : register(S0); 
float3 hsv_to_rgb(float3 HSV) 
{ 
    float3 RGB = HSV.z; 
    float var_h = HSV.x * 6; 
    float var_i = floor(var_h); // Or ... var_i = floor(var_h) 
    float var_1 = HSV.z * (1.0 - HSV.y); 
    float var_2 = HSV.z * (1.0 - HSV.y * (var_h-var_i)); 
    float var_3 = HSV.z * (1.0 - HSV.y * (1-(var_h-var_i))); 
    if  (var_i == 0) { RGB = float3(HSV.z, var_3, var_1); } 
    else if (var_i == 1) { RGB = float3(var_2, HSV.z, var_1); } 
    else if (var_i == 2) { RGB = float3(var_1, HSV.z, var_3); } 
    else if (var_i == 3) { RGB = float3(var_1, var_2, HSV.z); } 
    else if (var_i == 4) { RGB = float3(var_3, var_1, HSV.z); } 
    else     { RGB = float3(HSV.z, var_1, var_2); } 
    return (RGB); 
} 

float4 main(float2 uv : TEXCOORD) : COLOR 
{ 
    float4 col = tex2D(Samp, uv); 
    float gray = col.r*0.3 + col.g*0.59 + col.b * 0.11; 
    return float4(hsv_to_rgb(float3(Hue,Saturation,gray)),col.w); 
} 

退房Shazzam與自定義特效工作:所以它的行爲像這樣在Photoshop colourize功能你可以調整但是這種效果。