Silverlight用のピクセルシェーダを作って、スライダを使って色相/彩度/明度を変更するのに役立ちます。 *色相スライダ範囲内の値を有する:[-180、180] *彩度スライダ範囲内の値を有する:[-100、100] *明度のスライダーが範囲内の値を有する:[-100、100]HLSL色相変更アルゴリズム
I彩度と明度の値を操作できるピクセルシェーダを作成することができました。 しかし、私は色相値を変更するためのアルゴリズムを見つけることができます。 誰も私にアルゴリズムを提供できますか?ありがとうございました。ここで
は私のHLSLコードです:
/// <summary>The brightness offset.</summary>
/// <minValue>-180</minValue>
/// <maxValue>180</maxValue>
/// <defaultValue>0</defaultValue>
float Hue : register(C0);
/// <summary>The saturation offset.</summary>
/// <minValue>-100</minValue>
/// <maxValue>100</maxValue>
/// <defaultValue>0</defaultValue>
float Saturation : register(C1);
/// <summary>The lightness offset.</summary>
/// <minValue>-100</minValue>
/// <maxValue>100</maxValue>
/// <defaultValue>0</defaultValue>
float Lightness : register(C2);
sampler2D input : register(S0);
//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
float4 main(float2 uv : TEXCOORD) : COLOR
{
// some vars
float saturation = Saturation/100 + 1;
float lightness = Lightness/100;
float3 luminanceWeights = float3(0.299,0.587,0.114);
// input raw pixel
float4 srcPixel = tex2D(input, uv);
// Apply saturation
float luminance = dot(srcPixel, luminanceWeights);
float4 dstPixel = lerp(luminance, srcPixel, saturation);
// Apply lightness
dstPixel.rgb += lightness;
//retain the incoming alpha
dstPixel.a = srcPixel.a;
return dstPixel;
}