Bayard Chen
← 回展柜
工 开发

剪诗:让洞和字用同一套轮廓

做《剪诗·挖字剪贴》的时候,最难的不是拖拽,也不是纸纹,是一个看起来很小的问题:

剪下来的那块字,和诗里留下的那个洞,边缘要严丝合缝。

如果各画各的随机轮廓,那它们永远是两块不同的纸,视觉上立刻「假」。所以做法反过来——对每个字,只生成一次轮廓,然后:

  1. 用这套点画字块的外形;
  2. 用同一套点,在原文位置挖掉,走 GraphicsPath 的 Alternate 填充模式;
  3. 点的抖动幅度由「毛边」滑杆控制,随机种子固定在这个字身上。

于是拖回原位时是「啪」地贴回去,而不是「差不多的位置」。

麻烦的地方在于缩放和旋转:轮廓是相对字号的绝对坐标,画布缩放时路径需要跟着变换,但又不能每帧重新生成随机点,否则毛边会抖。我最后的做法是把点存在字的局部坐标系里,绘制时整体套一层 Matrix。

代码不多,但这个细节决定了它到底像不像剪纸。

C#桌面图形