<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[liulun的博客]]></title><description><![CDATA[风雪夜归人]]></description><link>https://blog.csdn.net/liulun</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; liulun]]></copyright><item><title><![CDATA[UI Composition 在 Win32 窗口中绘制字体图标]]></title><link>https://blog.csdn.net/liulun/article/details/168640124</link><guid>https://blog.csdn.net/liulun/article/details/168640124</guid><author>liulun</author><pubDate>Wed, 21 Oct 2026 10:21:50 +0800</pubDate><description><![CDATA[本文介绍如何在Win32应用中通过DraftDepot集成，利用DirectWrite从EXE资源加载自定义字体并构建独立字体集合。通过IDWriteFontSetBuilder1与内存字体加载器，安全加载嵌入的字体文件，生成IDWriteFontCollection1；再遍历字体族名，创建统一小写键的TextFormat映射表，实现多语言名称精准匹配。最终支持按名称获取格式并渲染文本，确保跨平台发布时字体一致性与程序健壮性。]]></description><category></category></item><item><title><![CDATA[UI Composition 技术在 Win32 窗口中绘制文本]]></title><link>https://blog.csdn.net/liulun/article/details/168435865</link><guid>https://blog.csdn.net/liulun/article/details/168435865</guid><author>liulun</author><pubDate>Mon, 19 Oct 2026 11:37:37 +0800</pubDate><description><![CDATA[本文详解了使用 Composition 渲染文本的完整流程：先初始化 D3D11 与 D2D 互操作环境，创建共享 GPU 资源的渲染管线；再通过 DWrite 创建文本格式与布局，测量文字实际尺寸；最后生成匹配大小的 GPU 纹理表面，将其作为贴图绘制到 SpriteVisual 上，实现高效、高 DPI 自适应的文本渲染。]]></description><category></category></item><item><title><![CDATA[UI Composition 技术在传统 Win32 窗口中绘制圆角矩形]]></title><link>https://blog.csdn.net/liulun/article/details/168109197</link><guid>https://blog.csdn.net/liulun/article/details/168109197</guid><author>liulun</author><pubDate>Fri, 16 Oct 2026 09:34:13 +0800</pubDate><description><![CDATA[本文使用 DraftDepot（稿仓 https://github.com/xland/DraftDepot）编辑并发布，DraftDepot 可以把一篇文章一键发布到多个平台。在学习本文章之前，请先看一下本文章之前的一篇文章。]]></description><category></category></item><item><title><![CDATA[在传统 Win32 窗口中使用 UI Composition 技术]]></title><link>https://blog.csdn.net/liulun/article/details/167804147</link><guid>https://blog.csdn.net/liulun/article/details/167804147</guid><author>liulun</author><pubDate>Tue, 13 Oct 2026 14:13:59 +0800</pubDate><description><![CDATA[本文介绍如何使用 WinRT 消息队列与 UI Composition 构建轻量级原生窗口应用。通过 DispatcherQueueController 建立消息循环，桥接原生 HWND 与 Compositor，实现透明背景、无 GDI 重定向的高效渲染。支持动态绘制、布局、动画及透明效果，所有操作无需调用 InvalidateRect，最终可打包为小于 1MB 的单文件可执行程序。后续将深入讲解布局、圆角、文本渲染及与 Yoga 引擎整合等高级功能。]]></description><category></category></item><item><title><![CDATA[开发邮箱客户端产品的技术选型（.Net）]]></title><link>https://blog.csdn.net/liulun/article/details/167475470</link><guid>https://blog.csdn.net/liulun/article/details/167475470</guid><author>liulun</author><pubDate>Sat, 10 Oct 2026 11:13:47 +0800</pubDate><description><![CDATA[本文推荐 .NET 开发者使用 MailKit 与 MimeKit 构建邮件客户端。MailKit 兼容性极强，可应对各类邮件服务器的协议怪癖（如 IMAP/SMTP 非标准响应、认证异常等），并内置自动修复机制。MimeKit 则提供严谨的 MIME 解析与构建能力，支持容错解码、TNEF 解封等。二者结合，实现高效、稳定的邮件收发。附带简洁示例代码，快速上手。]]></description><category></category></item><item><title><![CDATA[开源：一稿多投工具（仅4M，支持9大平台）]]></title><link>https://blog.csdn.net/liulun/article/details/167081526</link><guid>https://blog.csdn.net/liulun/article/details/167081526</guid><author>liulun</author><pubDate>Sun, 04 Oct 2026 13:46:11 +0800</pubDate><description><![CDATA[DraftDepot 稿仓是一款基于 WebView2 的轻量级一稿多投工具，支持将文章一键发布至微信公众号、知乎、CSDN 等9大技术平台。仅需4MB可执行文件，本地存储、自动保存、富文本编辑与代码高亮功能齐全。通过脚本注入实现跨平台内容填充与图片同步，利用 SQLite 记录已传图片避免重复上传，支持图像智能缩放与本地缓存。所有资源内嵌于单文件，无需依赖外部环境，真正实现“即开即用”。开源地址：https://github.com/xland/DraftDepot]]></description><category></category></item><item><title><![CDATA[AI 不仅仅埋葬了我的才华]]></title><link>https://blog.csdn.net/liulun/article/details/166469402</link><guid>https://blog.csdn.net/liulun/article/details/166469402</guid><author>liulun</author><pubDate>Wed, 23 Sep 2026 11:25:18 +0800</pubDate><description><![CDATA[AI编程颠覆了程序员的创作乐趣与职业价值。曾以写代码为乐的我，如今面对AI十分钟完成的任务，只剩机械执行。复杂系统被AI随意重构，代码难以理解，技术专家的核心能力被削弱。未来三年，人机协作仍为主流，但裁员潮已近在眼前。与其焦虑，不如注册一人公司，用AI实现创意，抓住转型机遇。]]></description><category></category></item><item><title><![CDATA[桌面翻译工具（仅1MB）支持快捷键取词]]></title><link>https://blog.csdn.net/liulun/article/details/163971882</link><guid>https://blog.csdn.net/liulun/article/details/163971882</guid><author>liulun</author><pubDate>Sat, 22 Aug 2026 12:18:27 +0800</pubDate><description><![CDATA[摘要：开发者推出了一款仅1MB的轻量级桌面翻译工具Translator，支持快捷键取词（默认Ctrl+Alt+T）。该工具需接入百度翻译API（每月100万字符免费额度），自动识别中英文互译。开源项目地址为github.com/xland/Translator，包含设置界面截图展示。工具可智能判断选中文本语言方向（中文→英文，非中文→中文）。]]></description><category></category></item><item><title><![CDATA[新版本：小巧强大的截图工具ScreenCapture（1MB单exe文件）​]]></title><link>https://blog.csdn.net/liulun/article/details/163718391</link><guid>https://blog.csdn.net/liulun/article/details/163718391</guid><author>liulun</author><pubDate>Thu, 13 Aug 2026 10:57:58 +0800</pubDate><description><![CDATA[ScreenCapture 是一款轻量级 Windows 截图工具，近期迎来多项功能更新：基于自研 Ling GUI 框架重构，新增 OCR 文字识别（需安装 25MB 插件）和二维码识别功能，优化录屏异常问题。界面交互改进包括取消托盘菜单、精简快捷键，支持框选截图后功能入口调整。新增命令行参数 --auto-quit 实现"用完即走"，恢复区域调整功能，支持便携模式配置。性能方面优化内存占用 5MB，修复 DPI 缩放定位问题。工具支持滚动截图、屏幕录制（GIF/MP4）、多语言等特性，仅 1MB 单文件]]></description><category></category></item><item><title><![CDATA[开源：功能齐全的截图工具（含录屏、截长图，体积仅780KB）]]></title><link>https://blog.csdn.net/liulun/article/details/162543847</link><guid>https://blog.csdn.net/liulun/article/details/162543847</guid><author>liulun</author><pubDate>Fri, 03 Jul 2026 10:54:44 +0800</pubDate><description><![CDATA[(更新略晚于github)以下为详细介绍。]]></description><category></category></item><item><title><![CDATA[C++ WinRT中的事件]]></title><link>https://blog.csdn.net/liulun/article/details/162521053</link><guid>https://blog.csdn.net/liulun/article/details/162521053</guid><author>liulun</author><pubDate>Thu, 02 Jul 2026 15:02:10 +0800</pubDate><description><![CDATA[【代码】C++ WinRT中的事件。]]></description><category></category></item><item><title><![CDATA[C++ WinRT中的异步]]></title><link>https://blog.csdn.net/liulun/article/details/153972629</link><guid>https://blog.csdn.net/liulun/article/details/153972629</guid><author>liulun</author><pubDate>Thu, 19 Feb 2026 10:55:45 +0800</pubDate><description><![CDATA[摘要：C++/WinRT是微软提供的现代C++17语言投影，支持Windows运行时异步编程。它通过协程(co_await)简化异步操作，提供IAsyncAction等四种异步类型。关键特性包括线程切换辅助函数(resume_background/foreground)和DispatcherQueue任务调度机制。文章重点介绍了异步编程模式，并警告在UI线程中使用.get()可能导致的死锁问题，建议使用Completed回调或协程方式处理异步结果。]]></description><category></category></item><item><title><![CDATA[开拓视野：漫谈WebView领域相关技术]]></title><link>https://blog.csdn.net/liulun/article/details/154140099</link><guid>https://blog.csdn.net/liulun/article/details/154140099</guid><author>liulun</author><pubDate>Sat, 01 Nov 2025 10:46:10 +0800</pubDate><description><![CDATA[漫谈WebView领域相关技术]]></description><category></category></item><item><title><![CDATA[Skia---常用的颜色过滤器]]></title><link>https://blog.csdn.net/liulun/article/details/152800504</link><guid>https://blog.csdn.net/liulun/article/details/152800504</guid><author>liulun</author><pubDate>Thu, 09 Oct 2025 15:05:29 +0800</pubDate><description><![CDATA[此方法前两个参数分别是阴影在 x 和 y 方向上的偏移量，第三、四个参数为阴影的模糊半径，第五个参数是阴影的颜色。每一行则对应于输出颜色的一个分量，四行分别是输出颜色的：R、G、B、A。较高的值会产生较小、较精细的噪声，而较低的值会产生较大、较粗糙的噪声，这两个值的取值范围应该在0-1之间。比如，第一行的五个值控制着输出颜色红色分量的值，它由输入颜色的R、G、B、A分量以及一个常数偏移量决定。）将源颜色与目标颜色（图像里的颜色）混合，结果颜色的 Alpha 值取决于源颜色的 Alpha 值。]]></description><category></category></item><item><title><![CDATA[Skia如何渲染文本段落]]></title><link>https://blog.csdn.net/liulun/article/details/151831629</link><guid>https://blog.csdn.net/liulun/article/details/151831629</guid><author>liulun</author><pubDate>Thu, 18 Sep 2025 16:31:42 +0800</pubDate><description><![CDATA[Skia 使用 skparagraph 和 icu 等库来辅助开发者渲染段落文本。skparagraph 是 Skia 提供的一个高级文本布局和绘制工具。它简化了文本排版的过程，使开发者可以更容易地处理复杂的文本布局需求，例如多行文本、自动换行、对齐方式等。icu (International Components for Unicode) 库是一个成熟的、功能全面的国际化开发库，被广泛用于处理 Unicode 文本，比如：字体的布局、文本的形状化、语言断词（用于自动换行）等功能。]]></description><category></category></item><item><title><![CDATA[Qt 监听系统音频输出设备切换事件]]></title><link>https://blog.csdn.net/liulun/article/details/149770775</link><guid>https://blog.csdn.net/liulun/article/details/149770775</guid><author>liulun</author><pubDate>Wed, 17 Sep 2025 11:24:43 +0800</pubDate><description><![CDATA[上述代码中player是：QMediaPlayer类型的实例。最近报了个Bug，说音频设备切换后就没声音了，]]></description><category></category></item><item><title><![CDATA[Skia渲染 SVG 矢量图像]]></title><link>https://blog.csdn.net/liulun/article/details/151611320</link><guid>https://blog.csdn.net/liulun/article/details/151611320</guid><author>liulun</author><pubDate>Fri, 12 Sep 2025 12:52:07 +0800</pubDate><description><![CDATA[类型的图像并不是位图图像，而是矢量图像，它是由数学方程定义的图形，主要由点、线、曲线、形状、颜色组成。由于此方法会被多次执行，不可能每次都去创建字体对象，所以这里用到了局部静态变量以缓存字体对象。位图图像在放大或缩小时可能会丢失图像的细节或出现锯齿，这类文件体积通常较大。矢量图像可以无限放大或缩小而不失真，与分辨率无关，这类文件体积通常较小。时会创建字体对象，以后每次调用，都使用第一次创建并缓存的字体对象。以让出CPU时间片，给子线程让出执行资源，避免忙等待。此对象提供从文件系统加载资源的能力，]]></description><category></category></item><item><title><![CDATA[Skia如何渲染 Lottie 动画]]></title><link>https://blog.csdn.net/liulun/article/details/151258349</link><guid>https://blog.csdn.net/liulun/article/details/151258349</guid><author>liulun</author><pubDate>Sat, 06 Sep 2025 17:07:09 +0800</pubDate><description><![CDATA[在渲染动画的每一帧前，必须清空了画布，因为 lottie 动画每一帧都可以独立渲染成一幅图像，如果不做清空工作，则可能和上一帧图像叠加到一起了。循环伊始，首先计算动画的位置和大小，因为用户可能随时调整窗口的大小，所以要在每次循环时都计算它们。值得注意的是，这个方法是在子线程中执行的，是受线程锁保护的，执行这个方法时，永不会执行。这是窗口大小改变时执行的代码，在这段代码中，使用线程锁来保护重置窗口画布数据的工作。渲染动画前先加线程锁，因为这里要修改画布像素数据，这与前面介绍的线程锁是呼应的。]]></description><category></category></item><item><title><![CDATA[Skia---如何渲染 Gif 动画]]></title><link>https://blog.csdn.net/liulun/article/details/151074578</link><guid>https://blog.csdn.net/liulun/article/details/151074578</guid><author>liulun</author><pubDate>Mon, 01 Sep 2025 16:44:10 +0800</pubDate><description><![CDATA[动画文件是基于一种压缩算法生成的：如果前一帧中包含的一部分像素与后一帧中包含的像素相同，那么后一帧中即不必存储这些像素，以此减少文件体积。这些图像按照特定的顺序排列，每一帧都代表动画中的一个瞬间，帧图像是支持透明的。动画的第一帧是一个完整的图像，后面每一帧存储的像素都是这一帧与前一帧不同的像素数据，不存在相同的像素数据。如果不是，则设置为下一帧。），窗口重绘时，会在窗口正中间渲染解码得到的图像，重绘完成之后，等待一段时间（指向的内存空间的数据，而且每改变一次（解码一帧），即请求一次窗口重绘。]]></description><category></category></item><item><title><![CDATA[Skia---如何处理图像（2）]]></title><link>https://blog.csdn.net/liulun/article/details/150636234</link><guid>https://blog.csdn.net/liulun/article/details/150636234</guid><author>liulun</author><pubDate>Sat, 23 Aug 2025 10:24:20 +0800</pubDate><description><![CDATA[如你所见，Skia 要求你主动告诉它你能提供什么解码器，Skia 这样做可以让应用程序消耗的内存更少，运行速度更快（不必一次性注册那么多图像解码器）。的编码支持，如果要对其他格式的图像进行编码，则需要开发者结合 Skia 提供的能力自行编码完成（ Skia 有公开相关接口）。程序确实按照窗口的大小绘制图像了，但绘制的图像失真了，就像图像没有执行抗锯齿处理一样。配置对象，这个对象用于控制图像缩放时如何完成像素采样工作，使用这个对象的默认值。用这个矩形对象来约束图像的位置和大小，让图像布满整个窗口。]]></description><category></category></item></channel></rss>