ImageEN 5.2.0 FullSource:Delphi图像控件全量包安装与使用指南
简介ImageEN 5.2.0 FullSource是一套功能全面的Delphi图像处理组件完整源码包适合Delphi 5至XE7环境下的桌面图像应用开发者尤其适合需要人脸识别、视频处理等高级能力的项目。组件覆盖人脸与人眼识别跟踪、视频播放、摄像头控制、图像对比与图像加解密等高级功能同时具备高效的常规图像处理能力作者在Delphi XE2中长期使用验证稳定性资源包共702个文件、约8.43MB其中162个pas源码文件构成核心实现84个dpk、64个dproj及40个bdsproj文件适配多版本Delphi工程配置另有chm帮助文档、res资源文件、ico图标和demo示例辅助开发。已有1276人学习或下载。包内含全部源码、详尽帮助文档、清晰安装方法并附Demo下载链接可帮助开发者快速配置环境、厘清组件调用逻辑是Delphi图像处理开发的高价值参考资料。1. ImageEN 5.2.0 FullSource老 Delphi 项目里最省事的图像控件全量包接手老项目最怕什么不是业务逻辑乱是 IDE 升级之后第三方控件编不过。ImageEN 5.2.0 FullSource 是这条路上少见的全量包——从 Delphi 5 一路覆盖到 XE7而且把全部源码、帮助文档、Demo 都放在一起。这篇笔记按我自己的落地顺序来写先确认环境再编译源码然后跑通 Demo最后把最容易翻车的几个点列清楚。适合手头有老系统要维护、或者正在给图像显示与格式转换功能做统一选型的人。读完之后你会知道这套控件能干什么、安装顺序怎么走、出了问题从哪里查起。2. 装 ImageEN 5.2.0 前先对齐环境D5 到 XE7 的版本差异与路径设置整个 5.2.0 宣传的跨度是 D5 到 XE7这意味着它必须兼容三代差异极大的 IDE。实际安装时绝大多数问题都不是控件本身坏而是环境没对齐。2.1 先认清你手里是哪一代 IDE从 Delphi 5 到 XE7 至少隔了三个断代D5/D6/D7 是 AnsiString 时代包文件以 dpk 为主编译走 dcc32D2005 到 D2009 引入新工程体系和 Unicode 字符串包工程变成 dprojXE2 以后又加入 Win64 目标平台和新的运行时库。ImageEN 5.2.0 号称覆盖两端实际源码里靠条件编译区分这些差异所以第一步不是解压而是搞清楚自己手上是哪个版本。我一般这样判断打开 IDE 的 About 对话框看版本号D5 到 D7 的老工程直接认准 dcc32 编译链D2009 之后只要代码里 String 被当成 UnicodeString就按新体系对待如果是 XE2 以上额外检查工程目标平台是 Win32 还是 Win64。这个判断决定后续所有操作别跳过。提示同一套源码在 D7 和 XE7 下编译生成的路径和产物后缀都会不一样务必先确认版本再动手。2.2 解压路径、源码目录与 Library Path很多人在这一步就翻车。ImageEN 这类带大量 pas 和资源文件的控件解压路径必须满足两个条件路径里不能有空格路径里不能有中文。Delphi 5 的老编译器对带空格的路径处理一直不太稳定报错往往很奇怪比如找不到 dcu 或者资源文件加载失败其实就是路径解析出了问题。我习惯把控件统一放到D:\Components\ImageEN这类短路径下然后打开 IDE 的 Library Path 设置把源码目录加进去。D5 到 D7 在 Tools Environment Options Library 里找D2009 之后的菜单路径类似但 XE2 以上多了一个 Platforms 下拉框Win32 和 Win64 两套平台要分别添加一遍路径很多人只加了默认平台切到 64 位就报找不到单元。实际操作时可以按这个顺序来先解压再设置 Library Path最后重启 IDE 让路径生效。设置完路径后验证一下随便打开一个 ImageEN 自带的 Demo 工程编译一次。如果编译直接通过环境就算就位如果报 Unit not found优先检查路径是否写错、是否带空格、是否加到了当前 IDE 实例上。这三件事占了环境问题的一半以上。2.3 帮助文档与 Demo 的落盘检查装之前先看一眼帮助文档的格式。5.2.0 年代常用的帮助文件有两种.chm 和 .hlp。.chm 文件在 Win7/Win10 上可能被系统锁定右键属性里解除锁定即可.hlp 文件麻烦一些新系统默认不带 WinHlp32 查看器双击直接提示打不开。想省事的话先确认手上是哪种格式再决定要不要提前装帮助查看器。Demo 目录同样值得先检查。常见情况是解压后 Demo 工程和图片资源分开放直接把工程文件复制到别处会导致图片加载不出来。正确做法是保持整个包解压后的目录结构用 IDE 打开包内原位置的 Demo 工程。如果某天 Demo 里的图片失踪先看相对路径是否存在别急着怀疑控件没装好。3. 把 FullSource 编进 IDERuntime 包和 DesignTime 包的正确顺序FullSource 的价值就是一个字——源码全。但源码全不代表双击就能用包和包之间是有依赖顺序的装错顺序轻则面板没控件重则 IDE 启动报错。3.1 FullSource 好在哪里能改源码就不需要黑匣子用预编译 bpl 的问题在于出了问题只能换版本没法查原因。FullSource 把 pas 全部给你IDE 在编译时直接从源码生成 dcu遇到和项目里其他第三方库的符号冲突还能自己改一行重新编译。这就是我选它的核心理由在老 IDE 上跑新系统兼容性补丁很多时候只能自己打。不过还有个前提杀毒软件先放行。编译第三方控件时杀软经常把临时生成的 bpl 或 dcu 当风险文件拦掉结果就是编译报错或者安装后找不到文件。我遇到过不止一次装完之后控件面板是空的最后发现是实时防护把安装过程生成的某个 dcl 包隔离了。装之前把源码目录加入杀软排除列表能省掉这种玄学问题。3.2 编译安装的完整步骤与产物说明常见做法是先编译 Runtime 包再编译 DesignTime 包。Runtime 包是程序运行时要依赖的包DesignTime 包是给 IDE 设计期用的里面登记了控件注册函数。DesignTime 包会引用 Runtime 包的编译产物所以顺序不能反。在 D5 到 D7 上操作路径是打开包文件后点 Compile 按钮编译成功再点 Install。在 D2009 之后做法类似但菜单文字略有变化。如果命令行对你更顺手也可以这样执行echo off rem 请把下面两个包名替换成你手里实际的包名以包内文件名为准 D:\Delphi7\Bin\dcc32.exe ImageEN_RunTime.dpk D:\Delphi7\Bin\dcc32.exe ImageEN_DesignTime.dpkdcc32 是老版本 IDE 自带的命令行编译器第一个命令先编译运行期包第二个命令再编译设计期包。注意每个 IDE 版本的 dcc32 路径不同不要拿 XE7 的编译器去编 D5 的包。如果你用的是 D2009 以上 IDE我更推荐直接在 IDE 里 Build命令行只适合深度排错时用。编译完成之后输出目录里会出现几类文件它们的用途要分清产物作用说明bpl运行时动态包程序运行时需要或 IDE 加载设计期包需要dcp包声明文件其他包编译时引用此包的符号信息dcu单元编译结果IDE 编译工程时直接链接dproj/dpk包工程源文件下次重新编译的入口3.3 在 IDE 里安装包并验证控件面板DesignTime 包编译成功后点 Install 按钮正常情况下 IDE 组件面板会新增一个 ImageEN 相关页签。如果 Install 按钮不可用或者面板没出现可以走手动路线Component Install Packages点 Add选择编译好的 DesignTime bpl 文件。带有 dcl 前缀的包通常就是设计期包不带 dcl 的往往只是运行期包。验证安装是否成功最简单的办法是新建一个 VCL 工程在组件面板里找 ImageEN 页签拖一个 TImageEnView 到窗体上。能拖出来并且属性编辑器正常显示就说明包已经挂进 IDE。如果拖不出来但编译 Demo 又能过问题多半出在设计期包的安装上运行期包其实已经正常。4. 跑通第一个 Demo显示图片、转换格式和缩略图装好的最终目的是能写业务代码。ImageEN 的上手路径很清晰先显示一张图再做格式转换最后摸到缩略图和数据库场景。这三个场景覆盖了它大部分价值。4.1 最小 Demo显示一张本地图片新建一个 VCL 工程窗体上放一个 TImageEnView再来一个按钮代码就这么简单uses ImageEnView; procedure TForm1.BtnLoadClick(Sender: TObject); begin // IO 层负责文件解码LoadFromFile 会根据扩展名自动识别格式 ImageEnView1.IO.LoadFromFile(D:\Test\photo.jpg); end;这里的核心是 IO 层。TImageEnView 只负责显示和管理画布真正读写文件的是它的 IO 属性。LoadFromFile 会根据扩展名自动选择解码器JPEG、PNG、BMP、TIFF 都能直接进来不需要你手动区分。Button 的 Caption 可以设成“加载图片”点一下就能看到图片出现在控件里。如果图片没显示先检查几个点文件路径存不存在、控件有没有放到窗体可见区域、IO 层有没有报异常。ImageEN 的加载错误一般不静默会抛出异常所以调试时开着 Delphi 的异常断点最容易定位。显示这一关过了后面都是顺水推舟的事。4.2 格式转换LoadFromFile 加 SaveToFile 就够了格式转换是 ImageEN 最实用的功能之一实现方式极其直白加载进来换个扩展名存出去。// 把 JPEG 转成 PNG保留透明通道时 PNG 更合适 ImageEnView1.IO.LoadFromFile(D:\Test\photo.jpg); ImageEnView1.IO.SaveToFile(D:\Test\photo.png); // 如果要输出 JPEG可参考下面对 Params 参数的设置不同版本属性名略有差异 // ImageEnView1.IO.Params.JPEG.Quality : 90; // ImageEnView1.IO.SaveToFile(D:\Test\photo_new.jpg);保存时也是 IO 层干活扩展名决定输出格式。转换场景里最容易踩的坑是源图带透明通道或 CMYK 色彩模式而目标格式不支持导致颜色发黑或通道丢失。遇到这种情况需要在保存前把图像拍平成目标格式支持的位深。这个操作属于 Proc 层的职责不同小版本的方法名略有差异以你装好的帮助文档为准。参数调整方面JPEG 输出质量控制一般在 IO.Params.JPEG 下面找TIFF 的压缩方式类似。初学者容易把 Params 和显示属性搞混记住一点IO.Params 只管读写文件和屏幕上的缩放、缩放模式没关系。4.3 多图预览与数据库图片两个高频场景缩略图场景我一般用 MView 系列控件适合做文件夹图片预览。把目录指给它控件会自动生成缩略图列表翻页和选择都内置好了不需要自己写循环加载。真正要写代码的是当图片不是文件、而是数据库 BLOB 字段时。常见做法是从字段读出流再交给 IO 层var ms: TMemoryStream; begin ms : TMemoryStream.Create; try // 假设 ADataset 是已经定位到当前记录的数据库连接 ADataset.FieldByName(Photo).SaveToStream(ms); ms.Position : 0; // 从流加载格式信息从流内容自动识别 ImageEnView1.IO.LoadFromStream(ms); finally ms.Free; end; end;从流加载和从文件加载是两套入口但 IO 层把它们统一了。LoadFromStream 的第二个参数可以显式指定格式不传就自动识别。需要注意流加载后流的生命周期由你自己管理ImageEN 不会帮你释放。在循环里反复 LoadFromStream 时记得每次重建或重置流否则会出现“下一张图叠加到上一张图上”的奇怪现象。5. ImageEN 常见问题排查5 个最容易翻车的点这个章节是血泪经验汇总。以下 5 个问题是我在实际安装和使用中遇到频率最高的每一条都按“现象 → 原因 → 解决”的顺序写清楚。5.1 帮助文档打不开现象双击包内的帮助文件没有反应或者系统提示找不到关联程序。原因5.2.0 属于较老版本帮助文件多为 .hlp 格式。Win7 以上系统默认不安装 WinHlp32 查看器所以双击后无响应。.chm 格式则是被系统安全策略锁住。解决先看后缀。.hlp 就安装对应 Windows 版本的帮助查看器.chm 则在右键属性里点“解除锁定”。不要试图把 .hlp 改名为 .chm格式完全不同改了也打不开。5.2 组件面板里找不到 ImageEN现象包编译成功但新建工程时组件面板没有 ImageEN 页签拖不了控件。原因只编译了 Runtime 包没安装 DesignTime 包或者 IDE 多版本共存包被安装到了另一个 IDE 版本的目录下。解决手动进入 Component Install Packages点 Add选择 DesignTime 包对应的 bpl。安装后如果还是找不到确认你打开的 IDE 版本和 bpl 所在目录是否一致。多版本共存的机器上最容易出现装到 D7 却在 XE7 里找的情况。5.3 编译报 Unit not found现象Demo 工程编译时提示找不到 ImageEN 相关单元或者提示某个 dcu 文件缺失。原因源码目录不在当前项目的 Library Path 中或者其他项目里引用了非标准路径。解决把解压后的源码目录加入 IDE 的 Library Path加完重启 IDE。同时检查路径是否带空格、是否含中文老编译器对这两个问题极其敏感。如果检查完还是报错用 IDE 的 CtrlClick 搜索单元文件确认实际文件是否真的在源码包里。5.4 XE2 以上切到 64 位平台编不过现象工程目标切换到 Win64 后大量 dcu 找不到或者编译到一半报汇编错误。原因5.2.0 时代的源码主要面向 32 位编译器部分内部实现用到了 32 位汇编或指针运算64 位模式下这些代码没有条件编译覆盖。解决先确认业务是否真的需要 64 位。连接数据库、展示图片这类场景32 位程序在新系统上依然能跑不必为了追新而强行切 64 位。如果必须 64 位优先考虑换用更新版本而不是在 5.2.0 上硬改汇编代码——改造量可能极大。5.5 中文乱码或字符串类型报错现象D2009 之后编译时出现乱码或者 PChar 与 String 混用位置报类型不匹配。原因老版本源码按 AnsiString 编写新 IDE 默认 String 为 UnicodeString两侧字节宽度不同内存拷贝时出现错位。解决项目统一处理字符串边界涉及控件枚举、文件路径传入时尽量显式转 AnsiString文件内容读写不要依赖默认字符串编码。界面显示中文乱码时优先检查传入路径的编码而不是怀疑控件本身。6. 把 ImageEN 当批量图像引擎用一个小工具核心代码与验证技巧装好、跑通、排完坑之后ImageEN 的真正价值才体现出来——它不是单个控件而是一套图像引擎。最常见的进阶用法是拿它做批量格式转换或尺寸整理。下面是一个目录批量转换的核心循环procedure ConvertFolder(const AInFolder, AOutFolder: string); var SR: TSearchRec; InFile, OutFile: string; begin // 只处理扩展名为 .jpg 的文件 if FindFirst(AInFolder \*.jpg, faAnyFile, SR) 0 then try repeat InFile : AInFolder \ SR.Name; OutFile : AOutFolder \ ChangeFileExt(SR.Name, .png); // 加载原图 ImageEnView1.IO.LoadFromFile(InFile); // 需要限制输出尺寸时在保存前调用 Proc 的缩放类方法即可 ImageEnView1.IO.SaveToFile(OutFile); until FindNext(SR) 0; finally FindClose(SR); end; end;这个写法兼容 D5 到 XE7没有用高阶文件遍历函数。FindFirst/FindNext 是所有版本通用的方式配合 ChangeFileExt 换扩展名正好覆盖批量转换的典型流程。需要限制尺寸时在 SaveToFile 前调用 Proc 层缩放方法具体方法名以当前版本帮助为准。我自己的习惯拿到这类带全源码的控件包第一件事不是拖控件写业务而是先编译、再跑自带 Demo、最后才清理掉 Demo 自己写代码。这个顺序看着慢但能避开一大堆隐患。批量处理时更别直接上全量目录——先拿 10 张最大的图试跑一遍观察内存占用和耗时确认没异常再跑全部文件。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Verilog实现SHA256算法:可上板验证的工业级RTL设计

Verilog实现SHA256算法:可上板验证的工业级RTL设计

简介:本资源是一套完整的Verilog语言实现SHA256哈希算法的工程代码,面向数字电路设计初学者、FPGA开发工程师及密码学硬件实现研究者,旨在帮助读者深入理解SHA256算法的硬件逻辑结构、消息填充机制、压缩函数与并行化设计思路。压缩包共18个文…

2026/10/13 18:44:46 阅读更多 →
UML建模设计航空订票系统:从用例图到部署图的完整实战指南

UML建模设计航空订票系统:从用例图到部署图的完整实战指南

简介:这份PDF面向软件工程学习者与UML建模入门者,围绕航空订票系统这一经典案例,讲解如何用统一建模语言完成从需求到部署的完整设计。内容涵盖用例图、类图、包图、顺序图、协作图、状态图、活动图、组件图与部署图九类图表,并结…

2026/10/13 18:44:46 阅读更多 →
Word文档降AI率实操:从检测原理到手动改写全流程

Word文档降AI率实操:从检测原理到手动改写全流程

先把丑话说在前头:我接下来要讲的这套Word文档降AI率操作,不是教你造假,而是把AI生成内容里那股明显的机器腔调改回人话。为什么非要改?因为现在很多智能检测工具一眼就能扫出文章是不是AI写的,这倒不是它们多神&#…

2026/10/13 18:43:45 阅读更多 →

最新新闻

前端链接测试从入门到落地:href 检测方案与实战经验

前端链接测试从入门到落地:href 检测方案与实战经验

做前端开发这些年,我越来越确定一件事:链接测试是所有页面检查里最容易被忽略、但一旦翻车影响面又最大的环节。“test href”这个短语初看像占位符,实际上它点破了一个很实在的动作——把页面里每一个 a 标签的 href 都当成潜在事故点&#…

2026/10/13 20:35:41 阅读更多 →
Spring Security实战:前后端分离下JWT认证与权限控制指南

Spring Security实战:前后端分离下JWT认证与权限控制指南

1. 项目概述与整体设计思路 1.1 为什么要花大力气搞 Spring Security 刚接手某个模拟项目X的时候,我其实挺纠结的:项目里已经有了一套基于拦截器和 ThreadLocal 的简易登录体系,能跑、能用,看起来也没啥大毛病。但后来随着接口越…

2026/10/13 20:35:41 阅读更多 →
WordNet相似度计算实战:NLTK实现与踩坑指南

WordNet相似度计算实战:NLTK实现与踩坑指南

前阵子帮朋友看一个智能问答的小项目,发现最棘手的问题不在模型选型,而在一个看起来特别基础的需求上:用户问“怎么修车”,系统里明明有“汽车保养指南”,却因为关键词匹配不上,死活召回不到。这种问题说白…

2026/10/13 20:35:41 阅读更多 →
Linux用户与组管理完全指南:从UID/GID到权限隔离实战

Linux用户与组管理完全指南:从UID/GID到权限隔离实战

1. 用户与组管理到底在解决什么问题先说结论:用户与组管理是所有多用户操作系统最基础、也最容易被轻视的一道安全防线。我见过不少项目初期图省事,全部人共用一个账号,等到需要追责、隔离权限、清理环境的时候,才发现当初偷的懒全…

2026/10/13 20:35:41 阅读更多 →
计及氢能的综合能源优化调度Matlab实现与建模详解

计及氢能的综合能源优化调度Matlab实现与建模详解

最近因为一个模拟园区的项目,我把一套计及氢能的综合能源优化调度模型从论文里搬到了Matlab里,跑到能出结果、能出图、能复现的程度。说实话,这种题目看着“高大上”,拆开其实就是三件事:把设备建好模、把约束写对、把…

2026/10/13 20:35:41 阅读更多 →
从零构建Agent技能库:技能层设计、动态装载与回归测试的工程实践

从零构建Agent技能库:技能层设计、动态装载与回归测试的工程实践

直接做Agent应用的人,这两年应该都有同感:单个Agent的对话能力已经不是瓶颈了,真正拉开差距的是Agent能不能稳定地调用外部能力、按流程完成任务。我最近在整理和重构一个内部项目,名字就叫“agent-skills”,本质上是一…

2026/10/13 20:34:36 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →