add MultiplyBlendEffect

This commit is contained in:
NaBian committed 2020-02-21 23:56:42 +08:00
1 parent 24d323c09d
commit f6da5e1101
15 files changed
+502 -71

No files matched your search

@@ -471,6 +471,12 @@
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\cloud.png">
<Link>Resources\Img\cloud.png</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\f.png">
<Link>Resources\Img\f.png</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\b.png">
<Link>Resources\Img\b.png</Link>
</Resource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="..\..\Shared\HandyControlDemo_Shared\Properties\Langs\Lang.en.resx">
@@ -76,6 +76,9 @@
<Resource Include="..\..\Shared\HandyControl_Shared\Resources\Effects\GrayScaleEffect.ps">
<Link>Resources\Effects\GrayScaleEffect.ps</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControl_Shared\Resources\Effects\MultiplyBlendEffect.ps">
<Link>Resources\Effects\MultiplyBlendEffect.ps</Link>
</Resource>
</ItemGroup>
<ItemGroup>
<Resource Include="..\..\Shared\HandyControl_Shared\Resources\Images\GlowWindow\bottom.png">
@@ -547,6 +547,12 @@
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\cloud.png">
<Link>Resources\Img\cloud.png</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\f.png">
<Link>Resources\Img\f.png</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\b.png">
<Link>Resources\Img\b.png</Link>
</Resource>
</ItemGroup>
<ItemGroup>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Data\DemoInfo.json">
@@ -128,6 +128,9 @@
<Resource Include="..\..\Shared\HandyControl_Shared\Resources\Effects\GrayScaleEffect.ps">
<Link>Resources\Effects\GrayScaleEffect.ps</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControl_Shared\Resources\Effects\MultiplyBlendEffect.ps">
<Link>Resources\Effects\MultiplyBlendEffect.ps</Link>
</Resource>
</ItemGroup>
<ItemGroup>
<Resource Include="..\..\Shared\HandyControl_Shared\Resources\Images\GlowWindow\bottom.png">
@@ -610,6 +610,12 @@
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\cloud.png">
<Link>Resources\Img\cloud.png</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\f.png">
<Link>Resources\Img\f.png</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\b.png">
<Link>Resources\Img\b.png</Link>
</Resource>
</ItemGroup>
<ItemGroup>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\fabric-icons.ttf">
@@ -199,6 +199,9 @@
<Resource Include="..\..\Shared\HandyControl_Shared\Resources\Effects\GrayScaleEffect.ps">
<Link>Resources\Effects\GrayScaleEffect.ps</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControl_Shared\Resources\Effects\MultiplyBlendEffect.ps">
<Link>Resources\Effects\MultiplyBlendEffect.ps</Link>
</Resource>
</ItemGroup>
<ItemGroup>
<Resource Include="..\..\Shared\HandyControl_Shared\Resources\Images\GlowWindow\bottom.png">
Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

@@ -25,75 +25,371 @@
</EventTrigger>
</UserControl.Triggers>
<hc:TransitioningContentControl>
<StackPanel Margin="20,0,20,32">
<UniformGrid Margin="16" Columns="3">
<Image Margin="16" Width="120" Height="120" Source="/HandyControlDemo;component/Resources/Img/Album/10.jpg"/>
<Image Width="120" Height="120" Source="/HandyControlDemo;component/Resources/Img/Album/10.jpg">
<Image.Effect>
<hc:ColorComplementEffect/>
</Image.Effect>
</Image>
<Image Width="120" Height="120" Source="/HandyControlDemo;component/Resources/Img/Album/10.jpg">
<Image.Effect>
<hc:GrayScaleEffect/>
</Image.Effect>
</Image>
<Image Width="120" Height="120" Source="/HandyControlDemo;component/Resources/Img/Album/10.jpg">
<Image.Effect>
<hc:GrayScaleEffect Scale=".7"/>
</Image.Effect>
</Image>
<Image Width="120" Height="120" Source="/HandyControlDemo;component/Resources/Img/Album/10.jpg">
<Image.Effect>
<hc:ColorMatrixEffect M11="-1" M22="-1" M33="-1" M41="1" M42="1" M43="1" M44="1" M51="1"/>
</Image.Effect>
</Image>
<Image Width="120" Height="120" Source="/HandyControlDemo;component/Resources/Img/Album/10.jpg">
<Image.Effect>
<hc:ColorMatrixEffect M11="1.5" M21="1.5" M31="1.5" M12="1.5" M22="1.5" M32="1.5" M13="1.5" M23="1.5" M33="1.5" M51="-1" M52="-1" M53="-1"/>
</Image.Effect>
</Image>
</UniformGrid>
<Border>
<Border.Effect>
<hc:ContrastEffect Contrast="20"/>
</Border.Effect>
<Border>
<Border.Effect>
<hc:BrightnessEffect Brightness="1"/>
</Border.Effect>
<TabControl Style="{StaticResource TabControlInLine}">
<TabItem Header="Effect">
<StackPanel Margin="20,0,20,32">
<UniformGrid Margin="16" Columns="3">
<Image Margin="16" Width="120" Height="120" Source="/HandyControlDemo;component/Resources/Img/Album/10.jpg"/>
<Image Width="120" Height="120" Source="/HandyControlDemo;component/Resources/Img/Album/10.jpg">
<Image.Effect>
<hc:ColorComplementEffect/>
</Image.Effect>
</Image>
<Image Width="120" Height="120" Source="/HandyControlDemo;component/Resources/Img/Album/10.jpg">
<Image.Effect>
<hc:GrayScaleEffect/>
</Image.Effect>
</Image>
<Image Width="120" Height="120" Source="/HandyControlDemo;component/Resources/Img/Album/10.jpg">
<Image.Effect>
<hc:GrayScaleEffect Scale=".7"/>
</Image.Effect>
</Image>
<Image Width="120" Height="120" Source="/HandyControlDemo;component/Resources/Img/Album/10.jpg">
<Image.Effect>
<hc:ColorMatrixEffect M11="-1" M22="-1" M33="-1" M41="1" M42="1" M43="1" M44="1" M51="1"/>
</Image.Effect>
</Image>
<Image Width="120" Height="120" Source="/HandyControlDemo;component/Resources/Img/Album/10.jpg">
<Image.Effect>
<hc:ColorMatrixEffect M11="1.5" M21="1.5" M31="1.5" M12="1.5" M22="1.5" M32="1.5" M13="1.5" M23="1.5" M33="1.5" M51="-1" M52="-1" M53="-1"/>
</Image.Effect>
</Image>
</UniformGrid>
<Border>
<Border.Effect>
<BlurEffect Radius="30"/>
<hc:ContrastEffect Contrast="20"/>
</Border.Effect>
<StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Border Width="100" Height="100" Background="Red" RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<TransformGroup>
<RotateTransform Angle="0" x:Name="TransformRotate1"/>
</TransformGroup>
</Border.RenderTransform>
</Border>
<Border Margin="30,0,0,0" Width="100" Height="100" Background="Red" RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<TransformGroup>
<RotateTransform Angle="0" x:Name="TransformRotate2"/>
</TransformGroup>
</Border.RenderTransform>
</Border>
</StackPanel>
<Border Width="100" Height="100" Background="Red" HorizontalAlignment="Center" RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<TransformGroup>
<RotateTransform Angle="0" x:Name="TransformRotate3"/>
</TransformGroup>
</Border.RenderTransform>
<Border>
<Border.Effect>
<hc:BrightnessEffect Brightness="1"/>
</Border.Effect>
<Border>
<Border.Effect>
<BlurEffect Radius="30"/>
</Border.Effect>
<StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Border Width="100" Height="100" Background="Red" RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<TransformGroup>
<RotateTransform Angle="0" x:Name="TransformRotate1"/>
</TransformGroup>
</Border.RenderTransform>
</Border>
<Border Margin="30,0,0,0" Width="100" Height="100" Background="Red" RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<TransformGroup>
<RotateTransform Angle="0" x:Name="TransformRotate2"/>
</TransformGroup>
</Border.RenderTransform>
</Border>
</StackPanel>
<Border Width="100" Height="100" Background="Red" HorizontalAlignment="Center" RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<TransformGroup>
<RotateTransform Angle="0" x:Name="TransformRotate3"/>
</TransformGroup>
</Border.RenderTransform>
</Border>
</StackPanel>
</Border>
</StackPanel>
</Border>
</Border>
</Border>
</Border>
</StackPanel>
</StackPanel>
</TabItem>
<TabItem Header="BlendEffect">
<UniformGrid Columns="6" Rows="4" Margin="8">
<Border Width="67" Height="135" Background="Transparent" Margin="8">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
<Border Width="67" Height="135" Background="Transparent">
<Border.Effect>
<hc:BlendEffect>
<hc:BlendEffect.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/b.png"/>
</hc:BlendEffect.Background>
<hc:BlendEffect.Foreground>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/f.png"/>
</hc:BlendEffect.Foreground>
</hc:BlendEffect>
</Border.Effect>
</Border>
</UniformGrid>
</TabItem>
</TabControl>
</hc:TransitioningContentControl>
</UserControl>
@@ -68,6 +68,8 @@
<Compile Include="$(MSBuildThisFileDirectory)Media\Animation\LinearGeometryKeyFrame.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Media\Animation\ResolvedKeyFrameEntry.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Media\Animation\SplineGeometryKeyFrame.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Media\Effects\BlendEffect.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Media\Effects\BlendEffectMode.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Media\Effects\BrightnessEffect.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Media\Effects\ColorComplementEffect.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Media\Effects\ColorMatrixEffect.cs" />
@@ -972,7 +974,10 @@
</Page>
</ItemGroup>
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)Resources\Effects\BrightnessEffect.fx" />
<None Include="$(MSBuildThisFileDirectory)Resources\Effects\ColorComplementEffect.fx" />
<None Include="$(MSBuildThisFileDirectory)Resources\Effects\ColorMatrixEffect.fx" />
<None Include="$(MSBuildThisFileDirectory)Resources\Effects\ContrastEffect.fx" />
<None Include="$(MSBuildThisFileDirectory)Resources\Effects\GrayScaleEffect.fx" />
</ItemGroup>
<ItemGroup>
@@ -0,0 +1,61 @@
//reference doc : https://docs.microsoft.com/en-us/windows/win32/direct2d/blend#blending-examples
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Effects;
namespace HandyControl.Media.Effects
{
public class BlendEffect : ShaderEffect
{
private static readonly Dictionary<BlendEffectMode, PixelShader> ShaderDic;
public static readonly DependencyProperty BackgroundProperty = RegisterPixelShaderSamplerProperty("Background", typeof(BlendEffect), 0);
public static readonly DependencyProperty ForegroundProperty = RegisterPixelShaderSamplerProperty("Foreground", typeof(BlendEffect), 1);
static BlendEffect()
{
ShaderDic = new Dictionary<BlendEffectMode, PixelShader>();
}
public BlendEffect()
{
if (!ShaderDic.ContainsKey(Mode))
{
ShaderDic[Mode] = new PixelShader
{
UriSource = new Uri($"pack://application:,,,/HandyControl;component/Resources/Effects/{Mode.ToString()}BlendEffect.ps")
};
}
PixelShader = ShaderDic[Mode];
UpdateShaderValue(BackgroundProperty);
UpdateShaderValue(ForegroundProperty);
}
public Brush Background
{
get => (Brush)GetValue(BackgroundProperty);
set => SetValue(BackgroundProperty, value);
}
public Brush Foreground
{
get => (Brush)GetValue(ForegroundProperty);
set => SetValue(ForegroundProperty, value);
}
public static readonly DependencyProperty ModeProperty = DependencyProperty.Register(
"Mode", typeof(BlendEffectMode), typeof(BlendEffect), new PropertyMetadata(default(BlendEffectMode), PixelShaderConstantCallback(0)));
public BlendEffectMode Mode
{
get => (BlendEffectMode) GetValue(ModeProperty);
set => SetValue(ModeProperty, value);
}
}
}
@@ -0,0 +1,32 @@
namespace HandyControl.Media.Effects
{
public enum BlendEffectMode
{
Multiply,
Screen,
Darken,
Lighten,
Dissolve,
ColorBurn,
LinearBurn,
DarkerColor,
LighterColor,
ColorDodge,
LinearDodge,
Overlay,
SoftLight,
HardLight,
VividLight,
LinearLight,
PinLight,
HardMix,
Difference,
Exclusion,
Hue,
Saturation,
Color,
Luminosity,
Subtract,
Division
}
}
@@ -46,11 +46,6 @@ float4 main(float2 uv : TEXCOORD) : COLOR
k, l, m, n,
p, q, r, s
};
float4 matrixA2 =
{
e, j, o, t
};
return mul(matrixA1, color) + matrixA2;
return mul(matrixA1, color) + float4( e, j, o, t );
}
@@ -0,0 +1,15 @@
sampler2D background : register(s0);
sampler2D foreground : register(s1);
float4 main(float2 uv : TEXCOORD) : COLOR
{
float4 b = tex2D(background, uv);
float4 f = tex2D(foreground, uv);
float4 o = b;
f.rgb *= f.a;
b.rgb *= b.a;
o.rgb = f.rgb * b.rgb + f.rgb * (1 - b.a) + b.rgb * (1 - f.a);
return o;
}