之前做老动画超分辨率工具时,我就觉得,把小时候喜欢的动画整理得更清楚,再拿给现在的小朋友看,是一件很有意思的事。
这次换个玩法:把喜欢的动漫图片变成黑白线稿,打印出来,让小朋友自己涂颜色。
可以是一张喜欢的角色插画,也可以是几张挑选好的动漫截图。提取线稿,调整深浅,拼成 A4 页面,最后导出一份 PDF------一份自己挑选内容的涂色册就做好了。
围绕这个想法,我做了一款 Windows 桌面小工具:
动漫线稿与涂色页工坊 · Anime2Sketch Vulkan。
它使用 C# WinForms 做界面,C++ Vulkan 负责神经网络推理,提供可以直接运行的部署包,也整理了完整的 VS2022 解决方案。

软件实际运行界面
从一张动漫图片,到一张可以涂色的线稿
先看一张实际处理结果。下面的输入来自 Anime2Sketch 官方测试示例,线稿由本工具的 Vulkan 后端生成。
原始图片:

Anime2Sketch 官方示例原图
生成的线稿:

本工具生成的默认线稿
这版采用的是 Anime2Sketch 官方项目(github.com/Mukosame/An... default U-Net 模型。原项目面向动漫、插画和漫画的线稿提取,提供了预训练权重和测试代码。
在此基础上,我们把模型推理、可视化调整、批量处理和打印排版放进了同一个桌面程序。
对于想做涂色素材的朋友,处理完就能保存、排版;对于做 C# 和 GPU 推理的朋友,也有一套完整工程可以继续研究。
线稿生成之后,还可以继续调整
不同素材适合的线条深浅不一样。有的原图线条已经很清楚,有的会留下一些浅灰色阴影,还有的适合进一步处理成纯黑白。
因此,界面里保留了几项直接影响成图的设置:
| 功能 | 可以用来做什么 |
|---|---|
| 线条深浅 | 加深或减淡线条,方便适应屏幕查看和打印 |
| 对比度 | 调整灰度层次,让线条与背景更分明 |
| 净白背景 | 减弱浅灰色残留,让纸面更干净;过高也可能损失细线 |
| 纯黑白 | 按阈值转换为黑白两色 |
| 白色背景 | 直接生成常见的白底线稿 |
| 透明背景 | 导出带透明度的 PNG,方便叠加到其他设计里 |
| 自选底色 | 给线稿配上自己喜欢的底色 |
调整这些参数,不需要重新跑一遍神经网络。
软件会保留最近一张图的原始灰度线稿。拖动滑块时,只重新计算线条和背景的显示效果;调好之后,再点击"保存当前效果"。
这样可以比较从容地试几种效果,而不用每改一个参数就等待一次模型推理。
批量生成,再拼成自己的 A4 涂色册
只处理一张图时,选择"单张图片"即可。如果已经整理了一个素材文件夹,可以切换到"文件夹批量"。
批量处理支持包含子目录、跳过已有结果,并保留输入的目录结构。遇到无法解码的图片,会记录错误并继续处理其他图片。
输出文件名包含原图内容和处理参数的摘要。换了一张原图,或者修改了线条参数,会生成对应的新结果,避免误把之前的图片当成这次的成品。
涂色页排版支持:
- 每页 1、2、4、6 或 9 张图片。
- A4 纵向、横向布局。
- 150 DPI 或 300 DPI。
- 可选显示图片名称。
- 导出逐页 PNG 和多页 PDF。
下面是一张实际生成并渲染检查过的 A4 页面示例:

A4 双图涂色页示例
可以在批量处理时勾选"处理后同时生成涂色册",也可以把已经生成的线稿放到一个文件夹,单独点击"已有线稿文件夹 → 涂色册"。
已有线稿排版会读取所选目录本层的图片,按文件名排序。提前把文件命名成 001.png、002.png、003.png,就比较容易控制页面顺序。
生成的 PDF 可以用常见 PDF 阅读器打开。打印时选择 A4、实际大小或 100% ,就能按设计的纸张尺寸输出。
逐页 PNG 保存无损版本;PDF 中使用质量 95 的 JPEG 控制文件体积。透明线稿在排版时会合成白底,适合直接打印。
怎么使用?先从默认设置开始
普通使用不需要配置开发环境。
第一步:完整解压部署包。
双击 Run.cmd 或 Anime2Sketch.WinForms.exe。运行环境为 Windows x64、.NET Framework 4.8,以及支持 Vulkan 的显卡驱动。
部署包已经带好模型,运行时不需要 Python、CUDA、OnnxRuntime,也不需要另外安装 Vulkan SDK。图像推理在本机完成。
第二步:选择输入和输出。
选择单图或文件夹,设置保存位置。软件自带一张测试图片,可以先用它熟悉操作。
第三步:模型输入先保留 512。
这是本版默认值,也与官方测试的默认尺寸一致。软件还提供 256、768、1024 选项,可以针对素材尝试;输入尺寸变大不代表效果一定更好。
模型内部会把图片缩放成正方形处理,生成线稿后再恢复原图宽高。输出尺寸恢复了,但线条的细节仍然受模型输入和原始素材影响。
第四步:生成线稿,调整效果。
先用默认参数查看结果,再按需要调整深浅、对比度、背景。满意后点击"保存当前效果"。
如果勾选"跳过已有结果",而这次图片已经处理过,软件显示的是保存好的成图。需要重新调整这张图时,取消勾选后再生成一次,让软件建立原始线稿缓存。
第五步:导出涂色册。
选择每页张数、方向和 DPI,生成 PNG 页面及 PDF,打印即可。
自带资源、默认输出、设置和 GPU 缓存都以 exe 所在目录 定位,默认使用相对路径。把完整软件文件夹换个位置,也能继续找到随包提供的模型和示例。
实测速度:512 输入,稳定推理约 24 毫秒
这次也记录了实际耗时,方便大家了解软件运行时各部分的开销。
测试设备为 NVIDIA GeForce RTX 4060 Laptop GPU ,使用 Release x64、Vulkan FP32,输入为官方 madoka.jpg 示例,模型输入设置为 512×512。
连续执行 6 次,取会话和尺寸计划准备完成后的后 5 次:
| 测试项目 | 本机实测 |
|---|---|
| Vulkan Run 平均耗时 | 24.02 毫秒/张 |
| 引擎处理平均耗时 | 53.49 毫秒/张 |
| 512 执行计划张量工作区 | 74 MiB |
这里的口径需要说清楚。
Vulkan Run 包含原生调用中的数据上传、GPU 执行、同步和下载。引擎处理还包含缩放、归一化、灰度转换和恢复原尺寸。两者都不能直接当作"从磁盘读图到保存 PDF"的完整耗时。
74 MiB 是计划中的张量工作区,不是整个程序的显存占用。 权重、传输缓冲、驱动管线等还会占用额外资源。
首次无管线缓存时,本机准备管线约用了 45 秒。这部分主要发生在初始化阶段,之后会尝试复用磁盘缓存;批量处理还会复用同一个 GPU 会话和相同尺寸的执行计划。因此,第一次点击和后续连续处理的等待时间会有明显差别。
这些数据来自本机示例测试,大家也可以结合自己的显卡、素材大小和磁盘速度观察实际表现。
技术上,C# 是怎样调用 Vulkan 完成推理的?
界面负责选择文件、收集参数、展示进度;真正的网络计算交给 C++ Vulkan 核心。
一次处理大致经过下面几个步骤:
bash
读取动漫图片
↓
缩放到模型输入尺寸,转换为 RGB 浮点张量
↓
C# 根据图描述生成执行计划
↓
通过 C ABI 调用 C++ Vulkan 运行时
↓
GPU 执行卷积、实例归一化、激活和上采样等计算
↓
下载单通道线稿,恢复原图宽高
↓
调整线条和背景,保存 PNG 或排版为 A4 涂色册
Vulkan 除了图形渲染,也支持计算工作负载。本项目使用计算着色器执行网络算子,并在 C++ 侧管理缓冲区、管线、命令提交和同步。相关基础概念可以参考 Khronos Vulkan 官方指南(docs.vulkan.org/guide/lates...
选择 Vulkan,也是为了继续复用我们前面几个图像工具积累的运行时。现有部署流程可以保持较少的外部运行依赖。这版软件当前提供的是 Windows x64 实现,实际验证使用的是上面列出的 NVIDIA 显卡。
模型适配中有两个值得交流的细节。
一个是转置卷积。默认模型使用的 4×4、步长 2 转置卷积,被精确拆成四个输出奇偶相位,每个相位复用 2×2 卷积,再交织写回结果。这样可以利用已有卷积内核,也避免构造大片插零张量。
另一个是跳跃连接中的原地操作。官方实现的 LeakyReLU 会原地修改张量,影响 skip 分支实际参与拼接的数据。导出时需要保留这个行为,才能对齐原网络。
我们将 C# 实际预处理后的同一个浮点张量交给官方 PyTorch 模型,对比 Vulkan 原始输出。512 输入下,最大绝对误差约为 0.00000417 ,平均绝对误差约为 0.000000092。
这项比较检查的是网络计算。文件解码和缩放分别使用 GDI+、PIL 时,仍可能产生一些端到端像素差异。
完整 VS2022 工程,方便继续修改
这次交付包含两个项目:C# WinForms 界面和 C++ Vulkan 核心。
C# 使用 .NET Framework 4.8,界面采用标准 MainForm.Designer.cs,可以在 VS2022 设计器里继续调整。
源码包还包含模型图描述、转换后的权重、原始 checkpoint、模型转换脚本、着色器源码、预编译 SPIR-V 和第三方许可说明。
安装 VS2022 的".NET 桌面开发""使用 C++ 的桌面开发"及配套 .NET Framework 4.8 开发组件后,打开解决方案,选择 Release | x64 ,将 Anime2Sketch.WinForms 设为启动项目,即可编译运行。现有模型已经导出好,正常编译和使用不需要 Python。
| 交付内容 | 压缩包大小 |
|---|---|
| 可直接运行的部署包 | 约 194 MiB |
| 单卷完整源码包 | 约 388 MiB |
部署包已做过异目录解压、从其他工作目录启动的检查;源码 ZIP 解压后也完成了独立编译验证。
做一点可以拿来用的小东西
这类项目有趣的地方,在于它很容易从电脑屏幕走到生活里。
选几张喜欢的动漫图片,生成线稿,排成两三页 A4,拿起彩笔,就能开始涂色。也可以把透明线稿放进自己的手账、卡片或排版练习里。
当然,最终效果还是要看素材:线条清楚、主体明确的图片比较方便整理;复杂背景和细碎纹理可能留下残线,净白或纯黑白设置过强也可能删掉细节。可以先试一张,调好参数再批量处理。
如果你也喜欢 C#、图像处理、Vulkan GPU 推理,或者想体验这款小工具,欢迎一起交流。
QQ群:天天代码码天天
群号:264292622
软件体验和后续改进,都欢迎在群里讨论。感谢 Anime2Sketch 作者公开模型与测试代码,也希望这次整理的桌面工具,能让这些技术变成大家用得上的小东西。