【发布时间】:2015-08-16 04:34:06
【问题描述】:
我需要使用直线和仿射变换绘制大量数据点(以缩放图形使其适合视图)。
目前,我正在使用 NSBezierPath,但我认为它的效率非常低(因为点在被绘制之前被复制到贝塞尔路径)。通过将数据切割成 50 点的块,我得到了改进(NSBezier 路径要快得多)。
但我知道使用核心图形或 CG.... 函数调用可能有更好的方法?
我的应用是用 swift 编写的。
【问题讨论】:
我需要使用直线和仿射变换绘制大量数据点(以缩放图形使其适合视图)。
目前,我正在使用 NSBezierPath,但我认为它的效率非常低(因为点在被绘制之前被复制到贝塞尔路径)。通过将数据切割成 50 点的块,我得到了改进(NSBezier 路径要快得多)。
但我知道使用核心图形或 CG.... 函数调用可能有更好的方法?
我的应用是用 swift 编写的。
【问题讨论】:
首先,如果您可以:分析您的应用并尝试确定您的性能瓶颈所在。
我的经验是 Core Graphics 在任何事情上都不是很快。
如果您想快速栅格化直线,您可能需要研究 OpenVG 实现(iOS 似乎有 several open source implementations),甚至直接使用 OpenGL。当然,这假设快速渲染大量行是您的应用程序的一个差异化因素,因此值得付出努力。
【讨论】:
CGContextMoveToPoint、CGContextAddLineToPoint 和CGContextStrokePath,但我发现在路径中放置 1000 个点比仅放置 100 个点要慢得多。这意味着它实际上像贝塞尔路径一样绘制,尽管它只包含直线。如何告诉系统只画直线?