WillPlus/AdvHD 引擎 .pna 立绘文件交互式查看器。
基于 WPF + HandyControls 开发,支持实时图层合成、差分切换、语义化命名和批量导出。
- 🧩 智能分组 — 根据文件中的
Type=1/2标记自动划分部件组,树形结构展示 - 🎚️ 差分切换 — 在每个分组内自由切换不同的图层
- 🔒 分组锁定 — 锁定分组后固定当前图层,批量导出时不参与排列组合
- ✏️ 双击重命名 — 分组和图层支持语义化命名(如“身体”、“微笑”),一键恢复默认
- 📦 批量导出 — 基于锁定状态自动生成笛卡尔积组合,支持预览、暂停/取消、进度反馈
- 📁 语义化文件名 — 导出格式
{文件名}_{分组名}[{图层名]}_{分组名}[{图层名}].png - ✂️ 裁剪画布 — 自动裁剪到立绘实际占用区域,去掉多余空白
- 🎨 自定义背景 — 设置窗口自由调整查看器背景颜色
- ⌨️ 快捷键 —
Ctrl+O打开 /Ctrl+S导出 /Ctrl+,设置 /Ctrl+B批量导出 /Ctrl+H关于 - 🔍 图像浏览 — 集成 HandyControls
ImageViewer,支持缩放、平移、拖拽 - 🖱️ 拖拽打开 — 直接把
.pna文件拖进窗口即可加载 - 📂 文件关联 — 双击
.pna文件直接启动查看器并自动加载,也可拖拽至.exe上打开
| 快捷键 | 功能 |
|---|---|
Ctrl+O |
打开 PNA 文件 |
Ctrl+S |
导出当前合成图 |
Ctrl+, |
打开设置窗口 |
Ctrl+B |
打开批量导出窗口 |
Ctrl+H |
打开关于窗口 |
- .NET 10 SDK 或更高
- Visual Studio 2026 / Rider / VS Code(推荐)
克隆仓库并进入目录:
git clone git@github.com:EienTokei/PNAViewer.git
cd PNAViewer还原依赖并编译:
dotnet restore
dotnet build
dotnet run或直接在 Visual Studio 中打开解决方案,按 F5 运行。
- 点击 “📂 打开” 按钮或拖拽
.pna文件到窗口 - 左侧 TreeView 显示所有部件组,单击切换当前编辑的组
- 下方 图层列表 显示当前组内的所有差分,单击切换选中图层
- 点击分组右侧的 🔓/🔒 按钮锁定/解锁分组(锁定后固定当前图层)
- 双击 分组或图层可重命名,右键或点击“恢复默认”回退
- 右侧画布实时合成显示所有图层叠加效果
- 裁剪画布 开关控制是否去除空白区域
- 📦 批量导出 自动生成所有组合并导出为 PNG
- HandyControls — WPF 控件库
- .NET 10 原生库
通过 NuGet 安装:
dotnet add package HandyControls- ✅ 全部 45 个
.pna立绘文件(L/M/S/X 四档分辨率)均正常解析与合成。 ⚠️ 标题文件SYS_Title.pna— 解析合成正常,但笛卡儿积的组合逻辑不太适合 UI 文件,若有反馈则考虑适配
- ✅ 随机抽取的
ST03A_X.pna、ST04B_X.pna兼容。
欢迎提交 Issue 或 Pull Request。如果你发现了新的 .pna 变种,也欢迎提供样本以便进一步完善解析器。
PNA Viewer 目前由我一个人在维护,但它的方向不应该只由我一个人决定。
如果你在使用过程中遇到了任何问题、觉得某个功能用着不顺手,或者有新的想法想加进来,请一定提个 Issue 或建议。对我来说,每一条反馈都是继续优化这个项目的动力。
你的声音会被听到,你的需求会直接决定接下来版本里会出现什么功能。期待你的留言!
以下是我个人计划中、但暂不打算落地的功能方向:
- 持久化重命名配置
- Ctrl+C 复制到剪切板
- 自定义图片背景
- ......
💡 如果你对其中某个功能特别感兴趣,欢迎提 Issue 告诉我 —— 你的反馈会直接影响优先级。
GNU General Public License v3.0
如有问题或建议,欢迎在 GitHub 上提交 Issue。
Happy viewing! 🎉




