in ExampleGallery/EffectsExample.xaml.cs [856:932]
private ICanvasImage CreateLuminanceToAlpha()
{
var contrastAdjustedTiger = new LinearTransferEffect
{
Source = bitmapTiger,
RedOffset = -3,
GreenOffset = -3,
BlueOffset = -3,
};
var tigerAlpha = new LuminanceToAlphaEffect
{
Source = contrastAdjustedTiger
};
var tigerAlphaWithWhiteRgb = new LinearTransferEffect
{
Source = tigerAlpha,
RedOffset = 1,
GreenOffset = 1,
BlueOffset = 1,
RedSlope = 0,
GreenSlope = 0,
BlueSlope = 0,
};
var recombinedRgbAndAlpha = new ArithmeticCompositeEffect
{
Source1 = tigerAlphaWithWhiteRgb,
Source2 = bitmapTiger,
};
var movedTiger = new Transform2DEffect
{
Source = recombinedRgbAndAlpha
};
const float turbulenceSize = 128;
var backgroundImage = new CropEffect
{
Source = new TileEffect
{
Source = new TurbulenceEffect
{
Octaves = 8,
Size = new Vector2(turbulenceSize),
Tileable = true
},
SourceRectangle = new Rect(0, 0, turbulenceSize, turbulenceSize)
},
SourceRectangle = new Rect((bitmapTiger.Size.ToVector2() * -0.5f).ToPoint(),
(bitmapTiger.Size.ToVector2() * 1.5f).ToPoint())
};
var tigerOnBackground = new BlendEffect
{
Foreground = movedTiger,
Background = backgroundImage
};
// Animation moves the alpha bitmap around, and alters color transfer settings to change how solid it is.
animationFunction = elapsedTime =>
{
contrastAdjustedTiger.RedSlope =
contrastAdjustedTiger.GreenSlope =
contrastAdjustedTiger.BlueSlope = ((float)Math.Sin(elapsedTime * 0.9) + 2) * 3;
var dx = (float)Math.Cos(elapsedTime) * 50;
var dy = (float)Math.Sin(elapsedTime) * 50;
movedTiger.TransformMatrix = Matrix3x2.CreateTranslation(dx, dy);
};
return tigerOnBackground;
}