gpt4 book ai didi

c# - WPF 中的像素着色器效果

转载 作者:行者123 更新时间:2023-11-30 15:32:25 26 4
gpt4 key购买 nike

我一直在关注 this tutorial关于如何在 WPF 应用程序中以动画形式包含像素着色器效果

背景

我觉得事情进展顺利,但我想对应用程序进行更改。在教程中,作者有一个单独的 GrayscaleEffect 项目,并在他的 XAML 中执行以下操作:

xmlns:effect="clr-namespace:GrayscaleEffect;assembly=GrayscaleEffect"

后来他有这个:

DataTemplate x:Key="itemTemplate">
<Grid Width="225" Margin="3">
<Border BorderBrush="White" BorderThickness="2">
<Image Source="{Binding}" HorizontalAlignment="Center" VerticalAlignment="Center">
<Image.Effect>
<local:GrayscaleEffectTest x:Name="grayscaleEffect"/>
</Image.Effect>
<Image.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<BeginStoryboard>
<Storyboard>
<!--HERE--> <DoubleAnimation To="1.0" Duration="0:0:0.3" AccelerationRatio="0.10" DecelerationRatio="0.25" Storyboard.TargetName="grayscaleEffect" Storyboard.TargetProperty="(local:GrayscaleEffectTest.DesaturationFactor)" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseLeave">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="0.0" Duration="0:0:4" AccelerationRatio="0.10" DecelerationRatio="0.25" Storyboard.TargetName="grayscaleEffect" Storyboard.TargetProperty="(local:GrayscaleEffectTest.DesaturationFactor)" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Image.Triggers>
</Image>
</Border>
</Grid>
</DataTemplate>

这里的关键点是很长的一行 <DoubleAnimation .... :

Storyboard.TargetProperty="(effect:GrayscaleEffect.DesaturationFactor)" />

我的方法

我想做同样的事情,除了我想把我所有的代码放在同一个项目中,而不是有两个项目。

因此,我不包括 ;assembly=GrayscaleEffect .此外我的<DoubleAnimation ...行内容如下:

<DoubleAnimation ... Storyboard.TargetName="grayscaleEffect" Storyboard.TargetProperty="(local:GrayscaleEffectTest.DesaturationFactor)" />

但是 WPF 设计器抛出初始化程序异常。程序运行,但当我将鼠标悬停在...上时,不会触发任何动画。

有人有什么想法吗?我相信 WPF 应该能够从同一个项目中运行像素着色器......我的项目有预构建事件,而不是重命名为 GrayscaleEffect Test 并将两个项目合并到第一,我的项目应该与教程相同。我尝试了许多其他失败方法,主要是设置 Storyboard.TargetProeprty = every damn thing under the sun .还尝试将一些东西组合在一起以在代码隐藏中设置动画,希望我至少可以使用调试器走一遍并尝试查看发生了什么。显然,没有任何效果:(。

如有任何帮助,我们将不胜感激。干杯。

最佳答案

有点尴尬,但错误是在椅子和键盘之间。所以,代码工作得很好。为了可能帮助其他人,我将解释我的调试过程,然后解释问题所在。

首先,我将像素着色器从红色更改为红色和绿色。即:

 result.r = 255;
result.g = 0;
result.b = 255 * factor;

Factor 是发送到显卡的数据变量。完成此操作后,我注意到一切正常。过渡是阶跃函数,而不是线性插值,但颜色在变化。然后,我认为像素颜色范围必须是 [0 到 1.0]。这给了我应该得到的效果。

 result.r = 1.0;
result.g = 0;
result.b = 1.0 * factor;

最后,我加载了一张新的企鹅图片而不是我使用的原始测试图像,我意识到我的重大错误。企鹅的照片工作得很好,我想,这到底是怎么回事?!然后我看了我的测试图像,这是一张黑白图像! (哑巴,哑巴哑巴)。不得不发布这个“解决方案” 的耻辱希望能阻止我再次犯这样的错误。感谢@Nico Schertler 的帮助。

关于c# - WPF 中的像素着色器效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19178714/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com