0

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?

4

1 に答える 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 に答える