2011-07-28 7 views
0

WPFMediakitと私は2つのモノクロカメラを使用しています。これらのコントロールの色相を変更したいと思います。 wpfコントロールの色相manupulationを個別に行うことは可能ですか?WPFユーザーコントロール色相レベル

答えて

1

グレースケールイメージで使用できる簡単な方法は、色あせしたいコントロールの上に半透明の四角形を置くことです。このメソッドには、以下のメソッドでは使用できない制限があります。グレーのよう青

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

の着色に

例えばは、グレースケール画像の色合いを変更なし飽和が何もしないではないだろう持って、this oneのような色相シフトはあなたを助けないだろう。それは、このようにPhotoshopでcolourize機能のように振る舞うように、あなたはしかし、その効果を調整できます。

/// <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をチェックしてください。

関連する問題