I am using the WPFMediakit and I two monochrome cameras I want to change the hue's of these controls. Is it possible doing hue manupulation of wpf controls individually?
質問する
774 次
1 に答える
1
グレースケール イメージで使用できる簡単な方法は、色を付けたいコントロールの上に半透明の四角形を配置することです。この方法には制限がありますが、以下の方法にはありません。
例: 青みを帯びる
<Grid>
<Image Source="C:\Windows\Web\Wallpaper\img1.jpg" />
<Rectangle Fill="#86004EFF" />
</Grid>
グレーには彩度がないため、グレースケール画像の色相を変更しても何も起こらないため、このような色相シフトは役に立ちません。ただし、その効果を調整して、次のように Photoshop のカラー化機能のように動作するようにすることもできます。
/// <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をご覧ください。
于 2011-07-28T21:39:31.700 に答える