2011-07-28 6 views
0

WPFMediakit을 사용하고 있으며 흑백 컨트롤을 사용하고 있습니다.이 컨트롤의 색조를 변경하고 싶습니다. 개별적으로 wpf 컨트롤의 색조 수동 조작을 수행 할 수 있습니까?WPF 사용자 컨트롤 색조 레벨

답변

1

회색 음영 이미지에서 사용할 수있는 간단한 방법은 색조를 적용 할 컨트롤 위에 반투명 사각형을 넣는 것입니다. 이 방법에는 아래의 방법에는 제한이 없습니다.

예컨대

회색은 아무것도하지 않습니다 그레이 스케일 이미지의 색조를 변화에는 채도가 없습니다으로

<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을 사용자 정의 효과 작업을위한 : 그것은이 같은 포토샵에서 colourize 기능처럼 동작 있도록 그러나 그 효과를 조정할 수 있습니다.