如何使用Quartz绘制钢笔笔划?

时间:2011-06-30 04:20:25

标签: iphone ios quartz-graphics

我知道更好的方法是在OpenGL中使用纹理。但是我仍然希望使用Quartz在我的App中绘制矢量图形。

我按照此链接但是没有按预期工作。 Applying a texture to stroke a CGContextStrokePath 我可能误解了一些事情。

你能告诉我解决这个问题的方法吗?

2 个答案:

答案 0 :(得分:6)

我认为“钢笔笔划”是指根据曲线的方向变得更厚或更薄的笔划,即垂直时较厚而水平时较薄。

作为矢量图形的钢笔笔划可以是封闭形状。取曲线并沿着钢笔尖的轴线以相反的方向偏移两个副本,每个钢笔尖的宽度的一半。关闭这些曲线,并用钢笔颜色或图案填充它们。水平笔尖四个像素宽将一个曲线偏移两个像素向右,第二个曲线偏移两个像素到左侧。未与轴对齐的笔尖可能需要一点三角法来计算精确的偏移。如果只使用预设的笔尺寸和角度,偏移可能会被整数偏移所捏造,看起来不错。

如果曲线完全符合笔尖的角度,则形状可能会降至最小所需行程厚度以下。这可以通过对这个派生形状应用笔划来解决,从而使得最终效果永远不会太薄。这可能会使厚部件变粗,可以通过改变偏移来调整。

编辑以回复有关如何使笔画中心比边缘更暗的评论:

我可以想出几种方法来实现中风形状的较暗中心。可以绘制具有不同厚度的多个形状,彼此叠置。最厚的颜色可以填充最浅的颜色,最深的颜色可以填充。或者原始路径的笔划可以绘制成图像,模糊,然后剪切到钢笔笔划形状。这可以绘制为具有多重混合模式的第二层,使笔划的中心变暗,并在边缘处逐渐变细。或者形状可以分成几个部分。沿着路径的每个小段可以填充渐变,该渐变从末端的光到中间的暗。

正如Caleb在他的回答中提到的那样,钢笔的真实世界功能和性能特征还有很多其他方面可以添加到模拟中。包含的方面越多,绘图代码就越复杂。

答案 1 :(得分:3)

根据伯纳先生的出色分析,我会指出,除方向外,手压和笔尖构造也会影响线宽。细笔尖可以在任何方向上产生几乎相同宽度的线,但笔尖上的压力增加会导致笔尖的两半扩展,从而产生更宽的线条并增加墨水流量。使用比羽毛笔更灵活的笔尖比使用钢笔更明显更有效。

您需要决定如何确定沿线的手压变化。您可以为每一行手动执行此操作,或者根据方向的变化,距离行尾的距离(当作者完成一条线并开始抬起笔时压力降低),写作者的左右手来提出一些算法(左撇子或右撇子),书写表面等。