我正在使用this code example为我的WPF应用调整BitmapImage的亮度和对比度。 HLSL代码的相关部分是:
sampler2D input : register(s0);
float brightness : register(c0);
float contrast : register(c1);
float4 main(float2 uv : TEXCOORD) : COLOR
{
float4 color = tex2D(input, uv);
float4 result = color;
result = color + brightness;
result = result * (1.0+contrast)/1.0;
return result;
}
我想要做的是添加一些东西来过滤掉低强度像素 - 这个想法是我想说的是图像的任何部分(我只是猜测我必须按每个像素执行此操作)低于某个阈值,使其变黑。我正在尝试过滤灰度低强度的东西,以使更轻的部分弹出更多(这是一个灰度图像)。然后我会使用滑块调整该阈值。
我只是不知道这是一个过滤器还是什么,希望它只是上面代码的简单mod。总计n00b到HLSL。
答案 0 :(得分:3)
这是@Ed版本的另一种方法。
这会输入任何颜色,并用黑色替换原始颜色。
/// <class>AdjustToBlack</class>
/// <description>An effect that makes pixels of a particular color black.</description>
sampler2D inputSampler : register(S0);
/// <summary>The color that becomes black.</summary>
/// <defaultValue>Green</defaultValue>
float4 ColorKey : register(C0);
/// <summary>The tolerance in color differences.</summary>
/// <minValue>0</minValue>
/// <maxValue>1</maxValue>
/// <defaultValue>0.3</defaultValue>
float Tolerance : register(C1);
float4 main(float2 uv : TEXCOORD) : COLOR
{
float4 color = tex2D( inputSampler, uv );
if (all(abs(color.rgb - ColorKey.rgb) < Tolerance)) {
color.rgb = 0;
}
return color;
}
示例来自Shazzam中包含的一个示例着色器。请注意,///注释是自定义标记,在Shazzam Shader Editor
中使用答案 1 :(得分:1)
试试这个:
sampler2D input : register(s0);
float threshold : register(c0);
float4 blankColor : register(c1);
float4 main(float2 uv : TEXCOORD) : COLOR
{
float4 color = tex2D(input, uv);
float intensity = (color.r + color.g + color.b) / 3;
float4 result;
if (intensity < threshold)
{
result = blankColor;
}
else
{
result = color;
}
return result;
}