C# 为自定义着色器效果创建黑色过滤器
我正在为我的WPF应用程序调整位图图像的亮度和对比度。HLSL代码的相关位如下所示:C# 为自定义着色器效果创建黑色过滤器,c#,wpf,hlsl,C#,Wpf,Hlsl,我正在为我的WPF应用程序调整位图图像的亮度和对比度。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;
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;
}
我想做的是添加一些滤除低强度像素的东西——我想说的是,图像的任何部分(我只是猜测我必须每像素做一次)都低于某个阈值,将其设置为黑色。我试着过滤掉灰色,一种低强度的东西,使较轻的部分更突出(这是一张灰度图像)。然后,我将使用滑块来调整该阈值
我只是不知道这是一个过滤器还是什么,我希望这只是上面代码的一个简单修改。总n00b到HLSL。尝试以下方法:
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;
}
2d输入:寄存器(s0);
浮动阈值:寄存器(c0);
浮动4空白颜色:寄存器(c1);
浮动4主(浮动2 uv:TEXCOORD):颜色
{
float4 color=tex2D(输入,uv);
浮动强度=(color.r+color.g+color.b)/3;
4结果;
如果(强度<阈值)
{
结果=空白颜色;
}
其他的
{
结果=颜色;
}
返回结果;
}
试试这个:
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;
}
2d输入:寄存器(s0);
浮动阈值:寄存器(c0);
浮动4空白颜色:寄存器(c1);
浮动4主(浮动2 uv:TEXCOORD):颜色
{
float4 color=tex2D(输入,uv);
浮动强度=(color.r+color.g+color.b)/3;
4结果;
如果(强度<阈值)
{
结果=空白颜色;
}
其他的
{
结果=颜色;
}
返回结果;
}
这里有一种@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;
}
///AdjustToBlack
///使特定颜色的像素变黑的效果。
采样器2D输入采样器:寄存器(S0);
///变成黑色的颜色。
///绿色的
float4颜色键:寄存器(C0);
///色差的容忍度。
/// 0
/// 1
/// 0.3
浮动公差:寄存器(C1);
浮动4主(浮动2 uv:TEXCOORD):颜色
{
float4 color=tex2D(输入采样器,uv);
if(全部(abs(color.rgb-ColorKey.rgb)<公差)){
color.rgb=0;
}
返回颜色;
}
示例来自Shazzam中包含的一个样例着色器。注意///注释是自定义标记,在中使用。这里有一种@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;
}
///AdjustToBlack
///使特定颜色的像素变黑的效果。
采样器2D输入采样器:寄存器(S0);
///变成黑色的颜色。
///绿色的
float4颜色键:寄存器(C0);
///色差的容忍度。
/// 0
/// 1
/// 0.3
浮动公差:寄存器(C1);
浮动4主(浮动2 uv:TEXCOORD):颜色
{
float4 color=tex2D(输入采样器,uv);
if(全部(abs(color.rgb-ColorKey.rgb)<公差)){
color.rgb=0;
}
返回颜色;
}
示例来自Shazzam中包含的一个样例着色器。注意///注释是自定义标记,在中使用。函数名不应该是main(),而应该是threshold()?@WaltRitscher:yes,我的错误。函数名不应该是main(),而应该是threshold()?@WaltRitscher:yes,我的错误。