91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

[UWP]CompositionLinearGradientBrush加BlendEffect

發布時間:2020-08-02 10:37:25 來源:網絡 閱讀:266 作者:sq5dfdd690add48 欄目:編程語言

1. 什么是BlendEffect

上一篇文章介紹了CompositionLinearGradientBrush的基本用法, 這篇文章再結合BlendEffec介紹一些更復雜的玩法。

Microsoft.Graphics.Canvas.Effects命名空間下的BlendEffect 用于組合兩張圖片(分別是作為輸入源的Background和Foreground),它包含多種模式,如下圖所示:

[UWP]CompositionLinearGradientBrush加BlendEffect

其中最簡單的是Screen模式,它的計算公式如下

[UWP]CompositionLinearGradientBrush加BlendEffect

看起來有點復雜, 我的理解是它相當于色輪中Background和Foreground之間拉直線,在直線的中間點的顏色,如下面這張圖,紅色和藍色組合成為紫色:

[UWP]CompositionLinearGradientBrush加BlendEffect

2. 組合CompositionBrush并使用BlendEffect

許多 CompositionBrushes 使用其他 CompositionBrushes 作為輸入。 例如,使用 SetSourceParameter 方法可以將其他 CompositionBrush 設為 CompositionEffectBrush 的輸入。這是CompositionBrush最好玩的地方之一。下面的例子介紹了怎么使用BlendEffect創建CompositionBrush。

首先創建兩個CompositionLinearGradientBrush:

var foregroundBrush = compositor.CreateLinearGradientBrush();
foregroundBrush.StartPoint = Vector2.Zero;
foregroundBrush.EndPoint = new Vector2(1.0f);
var redGradientStop = compositor.CreateColorGradientStop();
redGradientStop.Offset = 0f;
redGradientStop.Color = Color.FromArgb(255, 255, 0, 0);
var yellowGradientStop = compositor.CreateColorGradientStop();
yellowGradientStop.Offset = 1f;
yellowGradientStop.Color = Color.FromArgb(255, 0, 178, 255);
foregroundBrush.ColorStops.Add(redGradientStop);
foregroundBrush.ColorStops.Add(yellowGradientStop);

var backgroundBrush = compositor.CreateLinearGradientBrush();
backgroundBrush.StartPoint = new Vector2(0, 1f);
backgroundBrush.EndPoint = new Vector2(1f, 0);
var blueGradientStop = compositor.CreateColorGradientStop();
blueGradientStop.Offset = 0f;
blueGradientStop.Color = Color.FromArgb(255, 0, 0, 255);
var greenGradientStop = compositor.CreateColorGradientStop();
greenGradientStop.Offset = 1f;
greenGradientStop.Color = Color.FromArgb(255, 0, 255, 0);
backgroundBrush.ColorStops.Add(blueGradientStop);
backgroundBrush.ColorStops.Add(greenGradientStop);

它們的效果分別如下面兩張圖片所示:

[UWP]CompositionLinearGradientBrush加BlendEffect

[UWP]CompositionLinearGradientBrush加BlendEffect

接下來創建BlendEffect,并將Foreground和Background設置為CompositionEffectSourceParameter

var blendEffect = new BlendEffect()
{
    Mode = BlendEffectMode.Screen,
    Foreground = new CompositionEffectSourceParameter("Main"),
    Background = new CompositionEffectSourceParameter("Tint"),
};

使用BlendEffect創建Brush,并用SetSourceParameter設置它的Foreground和Background。

var effectFactory = compositor.CreateEffectFactory(blendEffect);
var blendEffectBrush = effectFactory.CreateBrush();
blendEffectBrush.SetSourceParameter("Main", foregroundBrush);
blendEffectBrush.SetSourceParameter("Tint", backgroundBrush);

最后就是一般的使用這個blendEffectBrush的代碼:

//創建SpriteVisual并設置Brush
var spriteVisual = compositor.CreateSpriteVisual();
spriteVisual.Brush = blendEffectBrush;

//將自定義 SpriteVisual 設置為元素的可視化樹的最后一個子元素。
ElementCompositionPreview.SetElementChildVisual(Gradient, spriteVisual);

最終運行效果如下:

[UWP]CompositionLinearGradientBrush加BlendEffect

3. 創建動畫

和上一篇文章一樣,我也把這篇文章用到的技術用在了一個番茄鐘應用里,,簡單地使用ColorKeyFrameAnimationScalarKeyFrameAnimation制作動畫:

private void StartOffsetAnimation(CompositionColorGradientStop gradientOffset, float offset)
{
    var offsetAnimation = _compositor.CreateScalarKeyFrameAnimation();
    offsetAnimation.Duration = TimeSpan.FromSeconds(1);
    offsetAnimation.InsertKeyFrame(1.0f, offset);
    gradientOffset.StartAnimation(nameof(CompositionColorGradientStop.Offset), offsetAnimation);
}

private void StartColorAnimation(CompositionColorGradientStop gradientOffset, Color color)
{
    var colorAnimation = _compositor.CreateColorKeyFrameAnimation();
    colorAnimation.Duration = TimeSpan.FromSeconds(2);
    colorAnimation.Direction = Windows.UI.Composition.AnimationDirection.Alternate;
    colorAnimation.InsertKeyFrame(1.0f, color);
    gradientOffset.StartAnimation(nameof(CompositionColorGradientStop.Color), colorAnimation);
}

完整代碼在這里,具體運行效果如下:

[UWP]CompositionLinearGradientBrush加BlendEffect

4. 結語

上面的動畫可以安裝我的番茄鐘應用試玩一下,安裝地址:

一個番茄鐘

這篇文章的動畫和代碼都參考了JustinLiu的代碼,感謝他的分享。

使用XAML畫筆難以做到這種多向漸變的效果,這都多虧了UWP提供了BlendEffect這個好玩的東西。BlendEffect還有很多其它好玩的模式,大家有空可以多多嘗試。

參考

合成畫筆 - Windows UWP applications _ Microsoft Docs

BlendEffect Class

BlendEffectMode Enumeration

CompositionEffectBrush.SetSourceParameter(String, CompositionBrush) Method (Windows.UI.Composition) - Windows UWP applications _ Microsoft Docs

CompositionEffectSourceParameter Class (Windows.UI.Composition) - Windows UWP applications _ Microsoft Docs

源碼

OnePomodoro_GradientsWithBlend.xaml.cs at master

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

襄樊市| 东源县| 从江县| 新昌县| 嘉禾县| 芜湖县| 东港市| 新晃| 保靖县| 淮南市| 本溪| 商丘市| 蛟河市| 桐庐县| 育儿| 黄浦区| 新和县| 苏尼特左旗| 九江县| 兴宁市| 三亚市| 长汀县| 枣庄市| 大丰市| 行唐县| 大同县| 集贤县| 绥棱县| 长阳| 神农架林区| 柯坪县| 巴东县| 安吉县| 乌恰县| 邹城市| 页游| 合江县| 馆陶县| 星子县| 普兰县| 枞阳县|