【发布时间】:2016-06-09 17:01:09
【问题描述】:
我知道更好的方法是在 OpenGL 中使用纹理。但是我还是想用 Quartz 在我的 App 中画矢量图。
我点击了这个链接,但它没有按预期工作。 Applying a texture to stroke a CGContextStrokePath 可能是我误会了什么。
你能告诉我解决这个问题的方法吗?
【问题讨论】:
标签: iphone ios quartz-graphics
我知道更好的方法是在 OpenGL 中使用纹理。但是我还是想用 Quartz 在我的 App 中画矢量图。
我点击了这个链接,但它没有按预期工作。 Applying a texture to stroke a CGContextStrokePath 可能是我误会了什么。
你能告诉我解决这个问题的方法吗?
【问题讨论】:
标签: iphone ios quartz-graphics
我假设“钢笔笔划”是指根据曲线走向的方向变粗或变细的笔划,即垂直时粗,水平时细。
作为矢量图形的钢笔笔划可以是封闭的形状。取曲线并沿钢笔笔尖的轴线沿相反方向偏移两个副本,每个副本都是钢笔笔尖宽度的一半。关闭这些曲线,并用钢笔颜色或图案填充它们。一个水平笔尖四像素宽将使一条曲线向右偏移两个像素,第二条曲线向左偏移两个像素。未与轴对齐的笔尖可能需要一点三角函数来计算精确的偏移量。如果只是使用预设的笔大小和角度,偏移量可以用看起来不错的整数偏移量来伪造。
在曲线与笔尖角度正好相交的地方,形状可能会低于所需的最小笔画粗细。这可以通过对这个派生的形状应用描边来解决,使最终的效果永远不会太薄。这可能会使厚的部分变厚,可以通过改变偏移量来调整。
编辑以回复有关如何使笔触中心比边缘更暗的评论:
我可以想出几种方法来使笔触形状的中心更暗。可以绘制不同厚度的多种形状,相互叠加。最厚的可以用最浅的颜色填充,最薄的可以用最深的颜色填充。或者,可以将原始路径的笔触绘制到图像上,进行模糊处理,然后剪裁为钢笔笔触形状。这可以绘制为具有多重混合模式的第二层,使笔触的中心变暗,并在边缘逐渐变细。或者形状可以分成小段。路径上的每个小段都可以填充从末端的亮到中间的暗的渐变。
正如 Caleb 在他的回答中提到的,钢笔的真实世界功能和性能特征还有很多其他方面可以添加到模拟中。包含的方面越多,绘图代码就越复杂。
【讨论】:
根据伯纳先生的出色分析,我会指出除了方向之外,手压和笔尖结构也会影响线宽。细笔尖可以在任何方向产生几乎相同宽度的线条,但增加的笔尖压力会导致笔尖的两半展开,从而产生更宽的线条并增加墨水流量。与钢笔尖相比,使用更灵活的笔尖(如鹅毛笔),这种效果显然会更明显。
您需要决定如何确定手压沿线的变化。您可以为每一行手动执行此操作,或者根据方向的变化、与行尾的距离(当作者完成一行并开始举笔时压力减小)、作者的惯用手(左或右),书写表面等。
【讨论】: