WPF效果第二百零六篇之快速黑白灰效果

2023-10-07 13:10

本文主要是介绍WPF效果第二百零六篇之快速黑白灰效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一大早就看到群友讨论怎么快速让界面黑白灰效果,这不突然想起来N年前咱简单通过ShaderEffects调节过饱和度、对比度、亮度;今天再次玩耍一下;来看看最终实现的效果:d5a88e6043cce80a4712b5ec70cb8e66.gif1、核心代码:

sampler2D implicitInput : register(s0);
float factor : register(c0);
float4 main(float2 uv : TEXCOORD) : COLOR
{float4 color = tex2D(implicitInput, uv);float gray = color.r * 0.3 + color.g * 0.59 + color.b *0.11;  float4 result;    result.r = (color.r - gray) * factor + gray;result.g = (color.g - gray) * factor + gray;result.b = (color.b - gray) * factor + gray;result.a = color.a;return result;
}

2、在Shazzam中编译生成cs和ps文件:

b47bef0b1264798c6dd365f858d501d5.png3、来看看cs文件:

public class GrayscaleEffectEffect : ShaderEffect{public static readonly DependencyProperty InputProperty = ShaderEffect.RegisterPixelShaderSamplerProperty("Input", typeof(GrayscaleEffectEffect), 0);public static readonly DependencyProperty FactorProperty = DependencyProperty.Register("Factor", typeof(double), typeof(GrayscaleEffectEffect), new UIPropertyMetadata(((double)(0D)), PixelShaderConstantCallback(0)));public GrayscaleEffectEffect(){PixelShader pixelShader = new PixelShader();pixelShader.UriSource = new Uri("/MapDemo;component/ShaderEffects/GrayscaleEffectEffect.ps", UriKind.Relative);this.PixelShader = pixelShader;this.UpdateShaderValue(InputProperty);this.UpdateShaderValue(FactorProperty);}public Brush Input{get{return ((Brush)(this.GetValue(InputProperty)));}set{this.SetValue(InputProperty, value);}}public double Factor{get{return ((double)(this.GetValue(FactorProperty)));}set{this.SetValue(FactorProperty, value);}}}

4、前台调用就很简单

<Grid Grid.Row="1"><Grid.Background><ImageBrush ImageSource="Images/Back.jpg" Stretch="Fill"/></Grid.Background><Grid.Effect><ShaderEffects:GrayscaleEffectEffect Factor="{Binding ElementName=BlackTbtn,Path=IsChecked,Converter={StaticResource ToggleButtonIsCheckedToGrayscaleEffectEffectConverter}}"/></Grid.Effect>
</Grid>

5、最后来个参考

http://bursjootech.blogspot.com/2008/06/grayscale-effect-pixel-shader-effect-in.html

最终简单的效果先这样吧2f2a9e67c90d25342d63cc45c86324d2.png;以后有时间的话,可以再去摸索一下更复杂的效果9d075d890e5f740afc7983eeb530998b.png;编程不息、Bug不止、无Bug、无生活7dbb35b934079f32f51656b84f4fc4b0.png;改bug的冷静、编码的激情、完成后的喜悦、挖坑的激动 、填坑的兴奋;这也许就是屌丝程序员的乐趣吧;今天就到这里吧;希望自己有动力一步一步坚持下去;生命不息,代码不止;大家抽空可以看看今天分享的效果,有好的意见和想法,可以在留言板随意留言;我看到后会第一时间回复大家,多谢大家的一直默默的关注和支持!如果觉得不错,那就伸出您的小手点个赞并关注一下!

这篇关于WPF效果第二百零六篇之快速黑白灰效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/157969

相关文章

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

C++快速排序超详细讲解

《C++快速排序超详细讲解》快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下... 目录一、快速排序原理二、快速排序标准代码三、代码解析四、使用while循环的快速排序1.代码代码1.由快

Win32下C++实现快速获取硬盘分区信息

《Win32下C++实现快速获取硬盘分区信息》这篇文章主要为大家详细介绍了Win32下C++如何实现快速获取硬盘分区信息,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实现代码CDiskDriveUtils.h#pragma once #include <wtypesbase

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav