游戏人生Silverlight(2) - 趣味钢琴[Silverlight 2.0(c#)]

【Chipyard】Gemmini快速上手 Gemmini 加速器在 ResNet50 推理任务中表现出计算密集型优势,核心操作周期分布符合深度学习模型特征,推理预测流程完整且测试通过,为后续硬件优化和模型部署提供了有效参考。 阅读详情
[源码下载]


游戏人生Silverlight(2) - 趣味钢琴[Silverlight 2.0(c#)]


作者: webabcd


介绍
使用 Silverlight 2.0(c#) 开发一个趣味钢琴


玩法
打开音箱,从左侧列表选择要挑战的乐谱,右侧会出现对应的乐谱提示动画,等按键提示移动到目标区后敲击键盘上对应的按键


在线DEMO
Get Microsoft Silverlight


思路
1、添加多个MediaElement控件,循环使用,以达到同时播放多个音阶的效果
2、提示按键模块分3组动画,分别为提示部分、目标部分和离开部分,进入目标区和离开目标区都要触发对应的事件,以使外部判断用户是否按照提示正确地敲击了按键


关键代码
1、钢琴音阶播放器
ScalePlayer.xaml.cs
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;

namespace  YYPiano.Controls.Parts
{
    
public partial class ScalePlayer : UserControl
    
{
        
// MediaElement 控件总数
        private int _count = 32;

        
// MediaElement 控件集合的索引
        private int _index = 0;

        
public ScalePlayer()
        
{
            InitializeComponent();

            
this.Loaded += new RoutedEventHandler(Player_Loaded);
        }


        
void Player_Loaded(object sender, RoutedEventArgs e)
        
{
            
// 在 Canvas 上添加指定数量的 MediaElement 控件
            for (int i = 0; i < _count; i++)
            
{
                var element 
= new MediaElement();
                element.Volume 
= 1d;

                root.Children.Add(element);
            }

        }


        
/// <summary>
        
/// 播放音阶
        
/// A 键对应 Scale 文件夹内的 A.mp3,以此类推
        
/// A 键对应 C 大调的低音 dou,以此类推
        
/// </summary>
        
/// <param name="key">键值</param>

        public void Play(Key key)
        
{
            
if (key >= Key.A && key <= Key.Z)
            
{
                
// 循环使用 MediaElement 控件集合中的控件
                if (_index > _count - 1)
                    _index 
= 0;

                
// 设置 MediaElement 的 Source 并播放
                var element = root.Children[_index] as MediaElement;
                element.Source 
= new Uri("/YYPiano;component/Scale/" + key.ToString() + ".mp3", UriKind.Relative);
                element.Stop();
                element.Play();

                _index
++;
            }

        }

    }

}



2、按键提示动画
AnimationKey.xaml
< UserControl  x:Class ="YYPiano.Controls.Parts.AnimationKey"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" >
    
< Canvas >
        
<!-- 3个椭圆,目标区,按键动画进入该区域后敲击则为有效敲击 -->
        
< Ellipse  x:Name ="target"  Width ="80"  Height ="80"  Stroke ="#F80"  Fill ="Transparent"  StrokeThickness ="1"  Canvas.Left ="0"  Canvas.Top ="250"   />
        
< Ellipse  x:Name ="target2"  Width ="80"  Height ="80"  Stroke ="#F80"  Fill ="Transparent"  StrokeThickness ="1"  Canvas.Left ="120"  Canvas.Top ="250"   />
        
< Ellipse  x:Name ="target3"  Width ="80"  Height ="80"  Stroke ="#F80"  Fill ="Transparent"  StrokeThickness ="1"  Canvas.Left ="240"  Canvas.Top ="250"   />

        
<!-- 提示按键 -->
        
< Border  x:Name ="container"  BorderBrush ="Gray"  BorderThickness ="1"  Width ="50"  Height ="50"  CornerRadius ="50"  Canvas.Left ="135"  RenderTransformOrigin ="0.5, 0.5" >
            
< TextBlock  x:Name ="key"  TextAlignment ="Center"  VerticalAlignment ="Center"  FontSize ="40"  FontWeight ="Bold" >
            
</ TextBlock >
            
< Border .RenderTransform >
                
< TransformGroup >
                    
< RotateTransform  x:Name ="rt"   />
                    
< TranslateTransform  x:Name ="tt"   />
                    
< ScaleTransform  x:Name ="st"  ScaleX ="0.3"  ScaleY ="0.3"   />
                
</ TransformGroup >
            
</ Border.RenderTransform >
        
</ Border >

        
< Canvas .Resources >
            
<!-- 主动画(缓冲提示) -->
            
< Storyboard  x:Name ="mainAni"  Completed ="mainAni_Completed" >
                
<!-- 坐标 -->
                
< DoubleAnimation  x:Name ="targetX"  From ="0"  To ="0"  Duration ="0:0:4"  Storyboard.TargetName ="tt"  Storyboard.TargetProperty ="X"   />
                
< DoubleAnimation  From ="0"  To ="250"  Duration ="0:0:4"  Storyboard.TargetName ="tt"  Storyboard.TargetProperty ="Y"   />

                
<!-- 旋转 -->
                
< DoubleAnimationUsingKeyFrames  Storyboard.TargetName ="rt"  Storyboard.TargetProperty ="Angle"  RepeatBehavior ="1x"   >
                    
< SplineDoubleKeyFrame  Value ="366"  KeySpline ="0.1,0 0.2,0.95"  KeyTime ="0:0:4"   />
                
</ DoubleAnimationUsingKeyFrames >

                
<!-- 缩放 -->
                
< DoubleAnimationUsingKeyFrames  Storyboard.TargetName ="st"  Storyboard.TargetProperty ="ScaleX" >
                    
< SplineDoubleKeyFrame  Value ="1"  KeySpline ="0.1,0 0.3,0.8"  KeyTime ="0:0:4"   />
                
</ DoubleAnimationUsingKeyFrames >
                
< DoubleAnimationUsingKeyFrames  Storyboard.TargetName ="st"  Storyboard.TargetProperty ="ScaleY" >
                    
< SplineDoubleKeyFrame  Value ="1"  KeySpline ="0.1,0 0.3,0.8"  KeyTime ="0:0:4"   />
                
</ DoubleAnimationUsingKeyFrames >
            
</ Storyboard >

            
<!-- 进入目标区后的动画 -->
            
< Storyboard  x:Name ="insideAni"  Completed ="insideAni_Completed"  Duration ="0:0:0.4" >
                
< DoubleAnimation  To ="310"  Storyboard.TargetName ="tt"  Storyboard.TargetProperty ="Y"   />
            
</ Storyboard >

            
<!-- 离开目标区后的动画 -->
            
< Storyboard  x:Name ="outsideAni" >
                
< DoubleAnimation  To ="400"  Storyboard.TargetName ="tt"  Storyboard.TargetProperty ="Y"   />
                
< DoubleAnimation  To ="0"  Storyboard.TargetName ="container"  Storyboard.TargetProperty ="Opacity"   />
            
</ Storyboard >
        
</ Canvas.Resources >
    
</ Canvas >
</ UserControl >

AnimationKey.xaml.cs
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;

namespace  YYPiano.Controls.Parts
{
    
public partial class AnimationKey : UserControl
    
{
        
public AnimationKey()
        
{
            InitializeComponent();
        }


        
/// <summary>
        
/// 键值 A - Z,动画显示,用于提示用户应该敲什么键
        
/// </summary>

        public Key Key
        
{
            
get { return Convert.ToChar(key.Text).ToKey(); }
            
set { key.Text = value.ToChar().ToString(); }
        }


        
/// <summary>
        
/// 开始动画
        
/// </summary>

        public void Start()
        
{
            mainAni.Begin();
        }


        
/// <summary>
        
/// 停止动画
        
/// </summary>

        public void Stop()
        
{
            mainAni.Stop();
            insideAni.Stop();
            outsideAni.Stop();
        }


        
/// <summary>
        
/// 动画开始时间
        
/// </summary>

        public TimeSpan BeginTime
        
{
            
set { mainAni.BeginTime = value; }
        }


        
private int _targetIndex;
        
/// <summary>
        
/// UI 上设置了 3 个目标区,设置键的动画最终要落到哪个区上
        
/// </summary>

        public int TargetIndex
        
{
            
set
            
{
                
if (value == 0)
                    targetX.To 
= -120;
                
else if (value == 1)
                    targetX.To 
= 0;
                
else if (value == 2)
                    targetX.To 
= 120;
                
else
                    targetX.To 
= 0;

                _targetIndex 
= value;
            }

        }


        
/// <summary>
        
/// 主动画完成后
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void mainAni_Completed(object sender, EventArgs e)
        
{
            
if (_targetIndex == 0)
                target.Fill 
= new SolidColorBrush(Colors.Orange);
            
else if (_targetIndex == 1)
                target2.Fill 
= new SolidColorBrush(Colors.Orange);
            
else if (_targetIndex == 2)
                target3.Fill 
= new SolidColorBrush(Colors.Orange);

            insideAni.Begin();

            OnInside();
        }


        
/// <summary>
        
/// 目标区动画完成后
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void insideAni_Completed(object sender, EventArgs e)
        
{
            
if (_targetIndex == 0)
                target.Fill 
= new SolidColorBrush(Colors.Transparent);
            
else if (_targetIndex == 1)
                target2.Fill 
= new SolidColorBrush(Colors.Transparent);
            
else if (_targetIndex == 2)
                target3.Fill 
= new SolidColorBrush(Colors.Transparent);

            outsideAni.Begin();

            OnOutside();
        }


        
/// <summary>
        
/// 动画进入目标区后的事件
        
/// </summary>

        public event EventHandler<PianoKeyEventArgs> Inside;
        
public void OnInside()
        
{
            
if (Inside != null)
            
{
                Inside(
this, new PianoKeyEventArgs() { Key = this.Key });
            }

        }


        
/// <summary>
        
/// 动画离开目标区后的事件
        
/// </summary>

        public event EventHandler<PianoKeyEventArgs> Outside;
        
public void OnOutside()
        
{
            
if (Outside != null)
            
{
                Outside(
this, new PianoKeyEventArgs() { Key = this.Key });
            }

        }

    }

}



3、乐谱提示动画
AnimationMusicBook.xaml.cs
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;

using  YYPiano.Controls.Parts;
using  System.Threading;

namespace  YYPiano.Controls
{
    
/// <summary>
    
/// 乐谱动画
    
/// </summary>

    public partial class AnimationMusicBook : UserControl
    
{
        
/// <summary>
        
/// 当前进入到目标区域的按键集合(先进先出)
        
/// </summary>

        private List<KeyHitModel> _currentKeys = new List<KeyHitModel>();

        
public AnimationMusicBook()
        
{
            InitializeComponent();
        }


        
/// <summary>
        
/// 启动乐谱动画
        
/// </summary>
        
/// <param name="code">乐谱编码</param>
        
/// <returns>是否成功地启动了乐谱动画</returns>

        public bool Start(string code)
        
{
            code 
= code.ToUpper().Trim();

            
// 清除已有的 AnimationKey 控件
            foreach (var c in root.Children)
            
{
                var ak 
= c as AnimationKey;
                ak.Stop();
            }

            root.Children.Clear();
            _currentKeys.Clear();

            
// 把乐谱编码解析为乐谱实体类(用于描述乐谱的每一音阶)集合
            var musicBook = new List<MusicBookModel>();
            var countDelay 
= 0;
            
try
            
{
                
foreach (var s in code.Split(','))
                
{
                    var delay 
= int.Parse(s.Trim().Substring(1));
                    var key 
= Convert.ToChar(s.Trim().Substring(0, 1)).ToKey();

                    musicBook.Add(
new MusicBookModel() { Length = countDelay, Key = key });

                    countDelay 
+= delay;
                }

            }

            
catch (Exception)
            
{
                
return false;
            }


            
// 在容器内放置相应的 AnimationKey 控件
            for (int i = 0; i < musicBook.Count; i++)
            
{
                AnimationKey key 
= new AnimationKey();
                key.TargetIndex 
= i % 3;
                key.Key 
= musicBook[i].Key;
                key.BeginTime 
= TimeSpan.FromMilliseconds(musicBook[i].Length);
                key.Inside 
+= new EventHandler<PianoKeyEventArgs>(key_Inside);
                key.Outside 
+= new EventHandler<PianoKeyEventArgs>(key_Outside);
                key.Start();

                root.Children.Add(key);
            }


            
return true;
        }


        
/// <summary>
        
/// 按键进入目标区
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        void key_Inside(object sender, PianoKeyEventArgs e)
        
{
            _currentKeys.Add(
new KeyHitModel { Key = e.Key, Hit = false });
        }


        
/// <summary>
        
/// 按键离开目标区
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        void key_Outside(object sender, PianoKeyEventArgs e)
        
{
            
// 获取此次离开目标区的按键(进入到目标区域的按键集合的第一个成员)
            var key = _currentKeys.First();

            
if (!key.Hit)
                OnLost();

            _currentKeys.RemoveAt(
0);
        }


        
/// <summary>
        
/// 指定的键值被敲击后所执行的方法
        
/// </summary>
        
/// <param name="key">键值</param>

        public void Play(Key key)
        
{
            
if (key >= Key.A && key <= Key.Z && _currentKeys.Where(p => !p.Hit).Count() > 0)
            
{
                var validKey 
= _currentKeys.Where(p => !p.Hit && p.Key == key).FirstOrDefault();
                
if (validKey != null)
                
{
                    OnScore();
                    validKey.Hit 
= true;
                }

                
else
                
{
                    OnLost();
                }

            }

        }


        
/// <summary>
        
/// 按键敲击正确的事件
        
/// </summary>

        public event EventHandler<EventArgs> Score;
        
public void OnScore()
        
{
            
if (Score != null)
            
{
                Score(
this, new EventArgs());
            }

        }


        
/// <summary>
        
/// 按键敲击错误或未及时敲击的事件
        
/// </summary>

        public event EventHandler<EventArgs> Lost;
        
public void OnLost()
        
{
            
if (Lost != null)
            
{
                Lost(
this, new EventArgs());
            }

        }

    }

}



OK
[源码下载]
【YOLO11改进 - C3k2融合】C3k2融合DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测 【YOLO11改进 - C3k2融合】C3k2DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测 阅读详情

相关推荐

Spring Boot整合AWS S3文件上传实战:从配置到权限管理全流程解析

本文详细解析了Spring Boot整合AWS S3文件上传的全流程,包括基础配置、核心上传功能实现、高级权限控制及安全最佳实践。通过实战案例展示如何高效处理文件上传、大文件分片及权限管理,帮助开发者构建健壮的文件管理系统。特别强调AWS S3的高可用性和安全性,适用于企业级应用开发。

sam99的博客 283

上接游戏人生Silverlight(2) - 趣味钢琴[Silverlight 2.0(c#)]

3、乐谱提示动画AnimationMusicBook.xaml.cs usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Net;usingSystem.Windows;usingSystem.Windows.Controls;usi...

weixin_34179968的博客 120

谷歌学术用publish-or-perish来对引用量排序

用谷歌学术搜索文献的时候发现不能按照引用量高低进行排序,网上提供了这个软件。 下载地址如下:Publish or Perish (harzing.com)https://harzing.com/resources/publish-or-perish 关于软件界面页面和各种指标的介绍,可以参考中科大的这个PPT: 文献分析软件——publish or perish(精品·公开课件).ppt (book118.com)https://max.book118.com/html/2018/1124/813

m0_48878989的博客 1万+

游戏人生Silverlight(2) - 趣味钢琴[Silverlight 2.0]

摘要: 使用 Silverlight 2.0(c#) 开发一个趣味钢琴。玩法:打开音箱,从左侧列表选择要挑战的乐谱,右侧会出现对应的乐谱提示动画,等按键提示移动到目标区后敲击键盘上对应的按键??阅读全文--------------------------新闻:新华社:涉及宣扬封建迷信 美国暴雪公司新商标注册被驳导航:博客园首页??知识库??新闻??招聘??社区??小组??博问??网摘??找找看...

梦海小说博客 157

单相PWM整流器的数学模型、工作原理

单相PWM整流器的数学模型、工作原理

weixin_58670090的博客 1万+

用友u8服务器优化,用友U8erp软件运行的性能优化方案图文教程

今天一定要给大家分享一下用友U8erp软件运行的性能优化方案图文教程,以下方案来自用友软件官方维护工程师反馈在在处理客户问题的时候,有一类问题较为挠头,就是诸如用友U8服务器效率低下的问题。比如用友U8运行慢,卡住等,我们暂先不提用友U8软件代码、脚本层面本身的性能提升问题,我们只是基于现有用友U8软件版本,在客户现有环境下排查用友U8软件运行的性能瓶颈,并采取一定的技术手段进行性能调校。本文将推...

weixin_39882870的博客 5306

MoonLightPiano-月光钢琴

MoonLightPiano-月光钢琴     预览地址:http://grmcac.com/silverlight/lab/moonlightpiano/ 项目地址:http://moonlightpiano.codeplex.com/ 源码下载:http://moonlightpiano.codeplex.com/SourceControl/ListDownloada...

weixin_34419321的博客 164

芯片散热技术突破:多尺度结构与VC集成方案解析

在半导体技术快速发展的背景下,芯片散热成为制约性能提升的关键瓶颈。传统散热技术如风冷和水冷已接近物理极限,而两相浸没式液冷技术凭借其超高传热系数成为新的解决方案。通过多尺度表面结构设计与真空腔均热板(Vapor Chamber)的集成创新,可以显著提升沸腾性能,降低沸腾起始温差(ONB)并突破临界热流密度(CHF)限制。这种技术在数据中心、高性能计算(HPC)和边缘计算等高热流密度场景中具有重要应用价值,能有效提升能效比(PUE)并降低能耗。

weixin_36288992的博客 151

经典博文--各系列文章

稳扎稳打Silverlight Silverlight 1.0 稳扎稳打Silverlight(1) - 1.0实例之电子表 稳扎稳打Silverlight(2) - 1.0实例之支持录音和回放的钢琴(Silverlight+ASP.NET AJAX+DLINQ) Silverlight 2.0 稳扎稳打Silverlight(3) - 2.0控件之Bo...

diaoshanwai2368的博客 231

《手把手教你玩转RTOS操作系统》专栏简介

《手把手教你玩转RTOS操作系统》专栏系统讲解实时操作系统开发,以FreeRTOS为主线,结合RT-Thread和Zephyr对比分析。内容涵盖RTOS基础、任务管理、通信机制、中断处理等核心知识,并配套STM32/ESP32平台实战项目。专栏特色在于零基础友好、实战驱动、多系统对比和行业趋势分析,适合嵌入式开发者进阶RTOS开发能力,解决实际项目中的选型与优化问题。通过完整学习路径,读者可掌握构建高可靠性嵌入式系统的关键技能。

MHD0815的博客 530

使用机器学习算法预测黄金价格

在本文中,我们将使用线性回归、XGBoost和LSTM这三种不同的机器学习算法来预测黄金价格。接下来,我们使用线性回归、XGBoost和LSTM分别建立了模型,并进行了训练和预测。这些机器学习算法可以帮助我们对黄金价格进行预测,但请注意,市场价格受多种因素影响,因此预测结果可能并不完全准确。接下来,我们需要对数据进行一些预处理,以便用于机器学习模型的训练和测试。我们将使用80%的数据作为训练集,20%的数据作为测试集。最后,我们将绘制每个模型的预测结果,并将其与实际价格进行比较,以评估模型的性能。

QromMatlab的博客 1316

【JVM】对象内存布局

HotSpot JVM 中,Java 对象内存布局由对象头(12字节,含Mark Word与压缩Klass Pointer)、实例数据及对齐填充构成,总大小为8字节倍数。对象头支持锁状态动态复用,指针压缩使引用仅4字节,但堆超32GB时失效。实例字段按类型优先级重排序以减少间隙,最小对象大小为16字节。通过JOL工具可精准验证布局,理解锁机制、GC、伪共享等底层行为。

2301_79732484的博客 148

vivo X200 Ultra前瞻系列(1):重塑影像旗舰标准

在色彩风格化、视频专业度上实现了安卓阵营的突破性进步。其2亿像素长焦、双LYT-818传感器及5轴防抖技术,对追求个性化创作的用户具有强吸引力。若真机表现能兑现硬件承诺,X200 Ultra有望重新定义手机影像的“专业”标准。然而,其厚重设计、价格门槛及生态适配问题,仍需市场检验。vivo X200 Ultra作为2025年上半年影像旗舰,以“全焦段夜视仪+电影级视频”为核心卖点,主打。,对标小米15 Ultra、OPPO Find X8 Ultra等竞品。,顶配版(24GB+2TB)逼近万元。

专注:太空算力、AI infra、异构调度、大模型成本工程 963

Lua 与 ToLua:运行机制及热更新原理

本文解析 Lua 与 ToLua 在 Unity 中的运行机制及热更新原理。Lua 作为可嵌入语言,通过编译字节码由虚拟机执行,支持运行时加载新脚本;ToLua 实现 C# 与 Lua 的双向调用,通过生成 Wrap 代码注册类型接口;热更新依赖于宿主动态加载并执行新脚本,结合资源管理、版本控制与状态处理机制。关键点包括:table 共享引用、函数值不随重定义更新、闭包捕获状态、元表实现类逻辑,以及对象跨语言传递的生命周期管理。完整热更新需独立设计补丁分发与回滚策略。

2503_90324697的博客 126

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C#使用opencv和Yolo模型识别车牌号

本文基于OpenCVSharp与OnnxRuntime,结合YoloV8n-pose_plate模型(检测车牌位置)和OCR模型(识别车牌文字),实现高效车牌识别。通过预处理、目标检测、NMS筛选及文字识别流程,最终输出车牌框位置与识别文本。代码封装良好,支持自定义路径与置信度阈值,具备实际应用价值。

lweiyue的专栏 160

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

使用lxml操作 Word 的 OpenXML 底层

本文综合介绍了使用lxml操作Word底层OpenXML文档的基础知识,并给出了一个效率远超VBA的提取Word文档中的表格的HTML表结构的实例,演示了用lxml获取及修改部分Word文档组成部件的文本、属性的方法。

yivifu的专栏 395

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C# NAFNet 图片去模糊

基于NAFNet与ONNX Runtime的C# WinForms图片去模糊工具,支持DirectML GPU加速与CPU回退,实现一键去模糊、大图分块处理、并排对比及拖拽打开。具备高DPI适配、自绘圆角界面、命令行批量处理等功能,适用于Windows 10/11系统,可灵活配置模型路径与分块大小,解决显存不足与边缘接缝问题。

hixiong123的博客 221

使用C#代码提取、修改或删除 Excel 中的超链接

通过 C# 和 VB.NET,可以方便地管理 Excel 文件中的超链接,包括提取、修改和删除等操作。提取超链接: 获取工作表中的超链接集合,读取每个超链接的地址和类型,并将相关信息保存到文本文件中。修改超链接: 更新超链接的显示文本和目标地址,确保链接信息准确。删除超链接: 移除指定的超链接,同时可以选择保留单元格中的原有显示文本,或清除单元格的全部内容。这些操作可以帮助开发人员更高效地管理 Excel 文档中的链接信息,减少重复的手动操作,也便于在数据迁移、文档维护和自动化报表处理等场景中使用。

2501_93070778的博客 221

C#: 控件不支持透明的背景色

把透明度固定为255。

海天鹰 29

week11-词云图

核心逻辑:词频越高,文字字号越大;适合快速看文本高频关键词(影评、评论、摘要文本非常适配 CommentInfo.csv)

m0_66244637的博客 132

C# 基于OpenCv的视觉工作流-章115-单节点条件

本章介绍C#基于OpenCv的视觉工作流中单节点条件的设置,涵盖列表值范围判断(支持“与”“或”逻辑)、模块结果参数匹配判定,以及结果显示图像与字体配置。通过灵活设定条件,实现检测结果的OK/NG自动判定,提升视觉系统智能化水平。配套工具“VisionTool 探迹”已更新,新增海康相机、PC相机采集及多类通讯优化功能,助力工业视觉应用。

sali-tec的博客 244

基于 OPC UA 的半导体工厂化学气体传输 SCADA 监控系统:架构设计与 C# MVVM 实现

本文提出一套面向半导体化学气体传输的可演进SCADA系统,基于OPCUA统一信息模型与C#+WPF+MVVM技术栈,实现从气源到机台的全链路实时监控、安全联锁与追溯。通过资产树建模、分层解耦架构与标准对齐(SEMI E30/E95/S2),确保系统可扩展、可维护、可审计,满足高安全、高可靠要求,支持快速落地与持续演进。

ponygame的博客 325

C# 程序一键打包(PupNet-Deploy)

它允许开发者通过一个统一的配置文件(.pupnet.conf)和一个简单的命令行指令,自动完成 .NET 代码编译(dotnet publish)与目标平台原生安装包(如 Windows 的 Setup 安装程序、Linux 的 AppImage / Debian / RPM 包等)的封装。一键全自动: 完美打通了“源码编译 -> 依赖收集 -> 路径替换 -> 快捷方式/元数据注册 -> 原生安装包生成”的全套自动化流水线。一次配置多端适配: 只需维护一份配置文件,即可搞定多端发布。

czjnoe的博客 178
上一篇: 再接再厉VS 2008 sp1 + .NET 3.5 sp1(6) - Entity Framework(实体框架)之Entity SQL
下一篇: 再接再厉VS 2008 sp1 + .NET 3.5 sp1(7) - Data Services(数据服务)
webabcd
博客等级 码龄17年 28粉丝 911原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值