- 博客(393)
- 资源 (10)
- 收藏
- 关注
原创 【wpf】从 DataContext 到依赖属性:WPF 自定义控件 ImageView 的优化之路
本文总结了WPF自定义控件ImageView的优化过程。最初版本直接使用DataContext绑定GraphicInfo对象,但存在数据冲突、可读性差等问题。通过优化为定义Graphic依赖属性,实现了数据绑定解耦,支持在ItemsControl中使用ItemTemplate绑定整个对象("{Binding}")。最终控件变得更健壮、可扩展,能优雅处理批量场景,同时保持MVVM模式。文章建议在WPF自定义控件开发中优先使用依赖属性而非直接依赖DataContext。
2025-09-15 15:04:53
288
3
原创 【Halcon 】Halcon 裁剪尺寸的像素陷阱全解析:为什么要 -0.5,为什么要 -1,而圆却不用?
本文解析了Halcon中ROI裁剪时常见的尺寸偏差问题。在Halcon中,像素坐标以中心点定义,导致几何矩形(如gen_rectangle2)需要将长度减0.5来对齐像素格,避免生成513x513的意外结果;而基于像素索引的HDrawingObject.RECTANGLE1则需要将右下角坐标减1来抵消内部转换偏移。相比之下,圆形(gen_circle)由于边界不对齐像素格,无需修正。理解这些差异能有效避免裁剪尺寸的常见错误。
2025-09-10 17:05:17
782
6
原创 WPF/Prism 中计算属性的通知机制详解 —— SetProperty 与 RaisePropertyChanged
WPF/Prism中计算属性更新的关键点:当属性依赖其他属性时,需在依赖项变更时手动触发计算属性的通知。文章对比了经典INotifyPropertyChanged实现和Prism的SetProperty/RaisePropertyChanged方法,重点说明后者能更简洁地处理属性更新。特别指出当计算属性依赖嵌套对象属性时,需将属性提升到外层或在嵌套对象中实现属性变更通知,才能确保UI正确刷新。提供了处理计算属性依赖关系的实用解决方案。
2025-09-09 21:26:21
732
4
原创 【git】Git 大文件推送失败问题及解决方案
本文介绍了Git推送大文件失败的解决方案。当单个文件超过平台限制(如100MB)时,直接删除文件无效,必须使用git filter-repo工具从历史记录中彻底移除大文件。操作步骤包括新克隆仓库、执行删除命令和强制推送。为避免此类问题,建议提前配置.gitignore忽略二进制文件等大文件,或使用Git LFS/网盘存储大文件。核心建议:源代码放Git,大文件放Release/网盘分开管理。
2025-09-09 20:03:01
389
原创 【yolo】YOLOv8 训练模型参数与多机环境差异总结
本文总结了YOLOv8训练过程中的常见问题及解决方案:1) model参数支持YAML、PT文件或已有训练结果三种形式;2) pretrained参数控制是否加载预训练权重;3) 训练效果差异主要源于随机性、硬件配置和环境差异;4) 离线环境需手动拷贝权重文件;5) 预训练模型在小数据集上表现通常优于从头训练。文章还提供了参数使用对照表,帮助用户避免训练中的常见问题。
2025-09-05 15:49:57
872
4
原创 【SuperSocket 】SuperSocket 中自定义 Session
SuperSocket框架允许通过自定义Session扩展客户端连接管理。开发者可以继承默认的AppSession类,添加业务属性(如用户ID、状态数据)并重写连接事件方法。通过实现ISessionFactory接口并注册到DI容器,框架会使用自定义Session类创建新连接。这种设计使开发者能够集中管理在线会话,实现广播、点对点通信等功能,同时将网络通信与业务逻辑分离。关键步骤包括继承AppSession、实现Session工厂、以及正确注册服务。
2025-09-04 22:13:25
517
1
原创 理解 C# `async` 的本质:从同步包装到状态机
C# 中 async/await 的本质是编译器生成状态机,而非自动实现异步。本文通过对比两种写法:Task.FromResult 直接包装同步结果为 Task,以及 async 方法自动包装返回值并可能使用 await Task.Delay(0) 占位,揭示了关键区别:async 允许直接返回原始值由编译器自动转换为 Task,但不会自动释放线程或实现异步操作,真正的异步需要依赖底层 I/O 或 Task 操作。实际开发中应根据场景选择合适方式 - 同步包装用 Task.FromResult,真正异步用
2025-09-04 21:22:18
996
2
原创 【SuperSocket 】利用 TaskCompletionSource 在 SuperSocket 中实现跨模块异步处理客户端消息
把回调变成了异步等待,这个真的是太酷啦~~~~~~~
2025-09-04 19:57:29
975
2
原创 SuperSocket 动态协议服务端开发全解析
SuperSocket动态协议服务端开发指南 本文介绍了使用SuperSocket框架开发支持多种协议类型的TCP服务端。SuperSocket是一个基于.NET的高性能可扩展Socket框架,支持多种协议处理方式。文章详细讲解了如何通过PipelineFilter实现Terminator和FixedHeader两种协议解析,并设计了一个可配置的过滤器工厂(ConfigurableFilterFactory),使服务端能够动态选择协议类型。核心内容包括消息包定义(StringPackageInfo)、自定义
2025-09-04 19:11:49
1034
7
原创 【wpf】WPF开发避坑指南:单例模式中依赖注入导致XAML设计器崩溃的解决方案
WPF开发避坑指南:单例模式中依赖注入导致XAML设计器崩溃 在WPF开发中,单例类构造函数使用依赖注入会导致XAML设计器崩溃(显示"对象引用未设置"错误),但程序运行时正常。这是因为设计器环境下不会初始化DI容器。解决方案: 使用DesignerProperties.GetIsInDesignMode判断设计时环境,跳过依赖解析 采用延迟解析策略,在属性访问时再获取依赖 为设计器提供模拟数据类 推荐方案:在单例构造函数中加入设计时判断: if(DesignerProperties.G
2025-09-03 14:47:44
1024
原创 【wpf】WPF 自定义控件绑定数据对象的最佳实践
本文总结了 WPF 自定义控件绑定数据对象的最佳实践。通过 ImageView 控件案例,比较了直接使用 DataContext 和定义依赖属性两种方式:前者简单但易冲突,后者更清晰且支持列表场景。推荐在控件需要独立 DataContext 或列表使用时采用依赖属性模式,如定义 Graphic 属性并处理绑定回调,这样既能解耦数据视图,又能在 ListBox 等场景中自然使用。文章最后给出了两种方式的适用场景建议。
2025-09-03 14:44:42
488
原创 【Halcon】HALCON 图形性能优化:SetSystem(“flush_graphic“, ...)
HALCON机器视觉开发中,图形窗口频繁刷新会导致界面闪烁和性能下降。通过SetSystem("flush_graphic", "false")关闭自动刷新,可让绘图指令缓存后批量执行,最后用SetSystem("flush_graphic", "true")一次性刷新显示。这种优化技巧能有效消除闪烁,提升程序运行效率,建议成对使用并控制好作用范围。合理运用该参数可显著改善视觉应用的用户体验和性能表现。
2025-09-03 09:25:47
345
原创 视觉引导机械手双夹爪抓取:偏心旋转补偿与逆运动学求解
本文针对视觉引导机械手抓取中夹具偏心导致的旋转偏移问题,提出两种解决方案:三步补偿法和一步逆运动学法。核心挑战在于机械手旋转时夹具会绕旋转中心做圆周运动,导致原本对准的点发生偏移。通过数学推导得出补偿公式,当夹具相对旋转中心偏移为(dX,dY)时,机械手应移动至[Xc-(dX·cosθ-dY·sinθ),Yc-(dX·sinθ+dY·cosθ)]并旋转θ角度,即可实现一步精准抓取。文中对比了两种方法的优劣,并提供了可直接调用的C#封装函数,适用于工业自动化场景中高精度抓取需求。
2025-09-01 21:19:55
727
原创 【WPF】WPF 自定义控件实战:从零打造一个可复用的 StatusIconTextButton (含避坑指南)
本文介绍了如何从零开始开发一个可复用的WPF自定义控件StatusIconTextButton,重点讲解了WPF自定义控件的核心实现机制和最佳实践。文章首先分析了传统开发方式的问题,如代码重复、无法统一管理等,提出了通过继承Control类创建可复用控件的解决方案。随后详细解析了WPF的Themes/Generic.xaml默认样式约定机制,并提供了完整的代码实现步骤,包括控件类的创建和默认模板的定义。该控件支持在线状态反馈、MaterialDesign图标、命令绑定等功能,同时遵循模板化设计,便于扩展和样
2025-08-29 16:20:16
1116
4
原创 【C#】获取不重复的编码(递增,非GUID)
本文探讨了在软件开发中为新对象分配唯一编码的优化方法。以C#通信设备管理系统为例,针对原始实现中存在的冗余变量、嵌套遍历等问题,提出两种优化方案:1)使用LINQ的Any()方法简化逻辑,适用于中小数据量场景;2)利用哈希集合的O(1)查找特性提升大数据量下的性能。文章对比了不同方案的适用场景和复杂度,并提供了通用实现代码,同时建议根据数据规模和并发需求选择合适方案,还讨论了编码起始值、步长调整等扩展场景。
2025-08-27 16:14:19
1003
2
原创 【prism】Prism 弹窗在 ViewModel 中控制大小的实践总结
本文介绍了在WPF中使用Prism框架时,通过ViewModel动态控制弹窗窗口大小的方法。通过利用DataContext关联,可以在ViewModel中找到并修改当前对话框的尺寸。文章提供了两种实现方式:直接在OnDialogOpened中设置固定大小,或通过DialogParameters动态传递尺寸参数。这种方案无需额外定制DialogWindow,实现简单且维护方便,是Prism弹窗大小控制的实用解决方案。
2025-08-26 20:13:38
512
6
原创 【wpf】WPF 实战:通过附加属性为 Grid 动态添加行列
摘要:本文介绍了一种使用WPF附加属性动态生成Grid行列的解决方案。传统Grid布局需要手动定义行列,无法直接绑定ViewModel数据。通过创建GridHelpers静态类,定义Rows和Columns两个附加属性,实现了Grid行列数的动态绑定和自动更新。这种方法完美支持MVVM模式,使布局能根据ViewModel属性值变化自动调整,适用于分屏应用等需要动态切换布局的场景。文章提供了完整的实现代码和MVVM应用示例,展示了如何使Grid布局真正实现数据驱动。
2025-08-26 10:49:32
722
原创 【Prism】Prism.DryIoc 对话框中使用 Region 的完整指南
本文介绍了在WPF+Prism框架下实现插件化对话框的完整解决方案。通过分析Prism.DryIoc中对话框Region失效的问题,提出使用Scoped RegionManager的优化方法。具体实现包括:创建独立的RegionManager实例、绑定到对话框窗口、在OnDialogOpened中进行导航等步骤。这种方法相比之前的Prism.Unity方案更简洁通用,成功解决了对话框中动态加载子视图的问题,实现了View的插件化切换功能。文章提供了完整的代码示例和关键点说明,为类似场景提供了可靠的技术参考。
2025-08-25 15:19:38
462
3
原创 【halcon】Halcon 开发笔记: gray_histo_abs 报错陷阱
Halcon使用中,区域(Region)与轮廓(Contour/XLD)转换时存在一个容易被忽视的陷阱。
2025-08-19 14:21:09
360
5
原创 【wpf】WPF 中的 MouseBinding 详解
这篇文章详细介绍了WPF中的MouseBinding功能及其在MVVM模式下的应用。主要内容包括:1) MouseBinding的定义,它可将鼠标手势与命令直接绑定;2) 常用MouseGesture配置,包括各种鼠标按键与修饰键组合;3) MouseBinding的使用位置,如控件、窗口或DataTemplate中;4) 通过ItemsControl示例展示了如何为列表项添加双击命令;5) 使用要点和常见问题解答。文章强调MouseBinding能简化事件处理逻辑,特别适合MVVM开发模式。
2025-08-14 15:17:08
812
2
原创 【C#】用队列构建一个对象池管理对象的创建和释放
本文探讨了在WPF图像处理项目中用ConcurrentQueue替代Queue+lock实现对象池的优化过程。原方案存在多线程性能瓶颈和对象生命周期管理问题,改用ConcurrentQueue后获得了更好的线程安全性和简洁性,同时避免了锁竞争。关键点包括:直接使用TryDequeue而非依赖Count判断,处理容量超限问题,以及注意HObject资源的特殊性。最终结论是ConcurrentQueue更适合高并发场景,但资源生命周期管理才是对象池设计的核心难点。
2025-08-12 16:47:44
1012
2
原创 【C#】C#并行编程在图像处理中的那些事儿:避坑与优化
本文总结了C#并行编程在图像处理中的关键实践。针对多线程处理图像ROI、批量检测等场景,使用Parallel.For/ForEach可显著提升性能,但需注意线程安全问题:用ConcurrentBag等线程安全集合替代List<T>,妥善管理非托管资源,采用Partitioner优化任务分配。文章强调异常捕获、控制并行度(建议设为CPU核心数)以及避免过度并行化。实测显示,将串行循环改造为并行后处理速度提升1倍。关键原则是:最小化共享状态,确保资源释放,根据任务特性权衡并行收益与复杂度。
2025-08-11 21:26:08
795
2
原创 【工控】线扫相机小结 第六篇
摘要(150字) 使用双线扫相机(图片高度31260)采集大尺寸产品(300mm)时出现"缓存已满"报错。原因是采集卡2G缓存无法承载两个相机的大数据量。解决方案:断开相机连接后,将两个相机的"图像帧缓存最大数量"均设置为2(需通过"数据流选择器"分别设置)。注意该参数最小值为2,若设为1系统会自动调整为3,仍会导致缓存溢出。通过此配置可避免缓存不足问题,平衡采集性能与硬件限制。
2025-08-11 16:19:37
275
3
原创 【Git】Visual Studio 实现合并分支
本文介绍了在Visual Studio中使用Git进行分支合并的两种方法:Merge和Rebase。首先需切换到目标分支,然后通过右键菜单选择合并或变基操作。Merge会保留分支历史并生成合并提交,适合团队协作;Rebase则重写提交历史形成线性结构,适合个人分支维护。文章通过截图详细演示了将功能分支合并到主分支的操作步骤,并比较了两种方式的区别。建议初学者先掌握Merge操作,熟悉后再尝试Rebase。
2025-08-09 15:41:39
701
1
原创 【C#】掌握并发利器:深入理解 .NET 中的 Task.WhenAll
本文深入探讨了.NET异步编程中的Task.WhenAll方法。作为并发处理多任务的核心工具,Task.WhenAll能显著提升性能,通过同时执行多个异步操作,将总耗时优化为最慢任务的耗时。文章详细介绍了其基本语法、使用场景,重点分析了常见误区与最佳实践,包括任务启动时机、异常处理、性能考量等关键点。特别针对混合处理无返回值与有返回值任务的场景,提供了实用的代码示例。同时指出了与Task.WhenAny的本质区别,并提醒开发者注意资源管理问题,为高效异步编程提供了全面指导。
2025-08-08 15:46:01
1673
9
原创 我和 ChatGPT:一次用 AI 反观自己的技术成长之旅
这篇博客记录了一次有趣的"反向画像"实验:作者让ChatGPT基于自己数百条技术提问来分析提问者的特质。AI精准描绘出作者是一位技术扎实、注重架构的工程实践者,并指出其潜在短板(如广度与深度平衡问题)。更令人惊讶的是,AI还为其制定了分阶段的技术成长路径,包括夯实技术栈、提升架构能力和建设技术影响力三个阶段。这次对话展现了AI作为"技术顾问"的潜力,不仅能分析现状,还能提供系统性成长建议,实现了人机协同的深度思考。作者建议读者也可尝试让AI分析自己的提问模式,以获得个
2025-08-08 08:57:28
873
2
原创 【prism】WPF Prism 页面导航缓存 —— 使用 IRegionMemberLifetime 防止页面重复加载
摘要: WPF Prism在Region导航时默认会重建页面实例,导致状态丢失和性能损耗。通过让ViewModel实现IRegionMemberLifetime接口并设置KeepAlive=true,可强制Prism缓存页面实例,避免重复初始化。该方法适用于需保持状态的复杂页面,能显著提升切换效率,但需注意仅适用于Region导航场景。实现时只需在ViewModel中添加接口并返回true,通过构造函数日志即可验证缓存效果。
2025-08-03 00:15:00
474
3
原创 【Halcon 】Halcon 实战:如何为 XLD 模板添加极性信息以提升匹配精度?
本文介绍了Halcon中为XLD轮廓模板添加极性信息的实用技巧。通过先以"ignore_local_polarity"模式创建模板,首次匹配获得位置后,使用set_shape_model_metric运算符结合真实图像为模板注入极性信息(边缘明暗方向)。这种方法弥补了XLD模板初始不支持极性的缺陷,可显著提升后续匹配的精度和抗干扰能力。实验显示,添加极性信息后的模板匹配效果明显优于无极性的匹配结果。该技术特别适用于基于手动绘制或处理后的XLD轮廓创建模板的场景。
2025-08-01 18:40:37
457
3
原创 【WPF】WPF Prism 开发经验总结:菜单命令删除项时报 InvalidCastException 的问题分析与解决
WPF Prism 右键菜单删除项报错问题分析 问题现象 在 WPF Prism 项目中,使用 ContextMenu 执行删除操作时,虽然数据删除成功,但随后抛出InvalidCastException异常,提示无法将MS.Internal.NamedObject转换为MBConfigInfo类型。 原因分析 ContextMenu的DataContext可能不正确 删除后UI刷新时绑定失效 原CommandParameter绑定方式(TemplatedParent.Content)存在问题 解决方案 确
2025-07-24 11:55:50
803
2
原创 【C#】C# 事件 两次 -= 会怎么样?
C#中事件运算符的行为解析:+=会多次添加处理器导致重复调用,而-=在移除不存在的处理器时不会报错。测试表明,事件中处理器的最终数量等于添加次数减去移除次数,多次移除是安全的但多次添加可能导致重复执行。开发者需注意避免意外多次注册事件处理器。
2025-07-21 20:18:59
327
3
原创 【Halcon】HObject 图像转 Bitmap 出现条纹/错位/黑白异常的解决方案
之前我写过一篇文章是Bitmap 转换为 Halcon 格式图像,这次我们来看看Halcon 转 Bitmap 。
2025-07-20 08:58:11
733
3
原创 【WPF】WPF 自定义控件之依赖属性
其实依赖属性最大的用处还是,可以给前台暴露属性。方便我们通过XAML设置属性。这篇文章主要介绍如何在自定义模板的时候,如何使用依赖属性,避免踩坑。
2025-07-17 20:26:45
858
1
原创 【WPF】 自定义控件中 依赖属性直接赋值导致绑定失效!
摘要 本文记录了WPF+Halcon开发中自定义控件遇到的两个关键问题及解决方案。一是依赖属性绑定失效问题,发现直接赋值会覆盖外部绑定,改用SetCurrentValue方法解决;二是HImage资源管理问题,强调必须手动释放非托管资源,并提供了释放时机的具体建议。文章总结了依赖属性使用和非托管资源管理的注意事项,为WPF+Halcon开发提供了实用经验。
2025-07-17 00:30:00
490
原创 【WPF】WPF 自定义控件 实战详解,含命令实现
本文将围绕如何编写一个自定义控件(如带右键菜单的图片控件 `ImageView`),逐步讲解其定义、命令绑定与 ContextMenu 中常见的语法技巧。
2025-07-14 15:25:09
1240
5
原创 【MaterialDesign】谷歌Material(Google Material Icons) 图标英文 对照一览表
本文介绍了MaterialDesign图标库在WPF中的使用方法,提供了图标英文名称与对应图标的对照表。通过示例代码演示了如何在XAML中使用PackIcon控件,包括设置按钮样式、绑定命令等基本用法。文中还包含多张图标预览图,帮助开发者直观了解不同图标样式(如AddToPhotos等),方便在实际项目中选择合适的图标。虽然图标名称大小写和下划线可能存在差异,但大多数都能正确匹配。
2025-07-12 16:51:48
373
1
原创 【WPF实战】MVVM中如何从数据模型反查自定义控件实例(ImageView + Halcon)
摘要:本文介绍在WPF MVVM架构中实现数据模型反向访问控件的解决方案。通过自定义ImageView控件绑定Halcon图像窗口,提出在数据模型CameraGraphicInfo中添加ViewRef属性,并在控件加载时自动注册引用的方法。相比传统的视觉树查找方案,该方法具有简洁稳定、强类型支持等优势,特别适用于需要深度操作图像控件的场景。文章还对比了不同实现方式的优劣,为Halcon+WPF开发者提供了一种优雅的跨层交互设计思路。(149字)
2025-07-10 20:40:37
444
3
原创 【Halcon】WPF 自定义Halcon显示控件完整流程与 `OnApplyTemplate` 未触发的根本原因解析!
本片文章最后给出自定义alcon显示控件源码,可以实现图片绑定!
2025-07-05 16:24:55
635
5
原创 【工业相机】通过照片过曝提高匹配精度
在过曝的这种情况下,去掉一些模糊不清的边缘部分,感觉上像是从3D到了2D的感觉,模板匹配的效果,有了大幅度的提升!
2025-07-03 09:22:17
400
3
原创 【设计模式】用观察者模式对比事件订阅(相机举例)
📝 文章摘要:本文对比了传统事件机制与观察者模式在图像采集系统中的实现差异。传统事件订阅存在回调管理困难、异常串联中断等问题
2025-06-19 15:38:24
827
7
《PrismPrism.DryIoc 对话框中使用 Region 的完整指南 》 配套资源
2025-08-25
halcon算子列表.xlsx
2025-08-05
TimeQuest笔记
2013-04-09
孙鑫C++教程(全20讲)PPT讲义 + code
2024-04-18
wpf .net prism 框架 项目模板
2023-12-08
tesseract-ocr-setup-4.00.00dev + tessdata + jTessBoxEditorFX-2.2
2022-04-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人