如何使用 Core Graphics 绘制点?

Posted

技术标签:

【中文标题】如何使用 Core Graphics 绘制点?【英文标题】:How do I draw a point using Core Graphics? 【发布时间】:2010-09-23 16:53:20 【问题描述】:

我在 Quartz 中看到了用于绘制线和圆的 API。但我想要做的就是指定 (x,y) 笛卡尔坐标以将像素着色为特定值。我该怎么做?

【问题讨论】:

【参考方案1】:

您可以在相关坐标处绘制一条 1 像素长度的线;这应该可以完成您想要的。

【讨论】:

【参考方案2】:

Quartz 不是面向像素的 API,它的上下文不一定是像素缓冲区。如果要绘制像素图,请使用CGBitmapContextCreate() 创建位图上下文。您提供一个缓冲区,您可以直接对其进行操作,并且可以通过使用CGImageCreate() 从同一缓冲区创建CGImage 并绘制它来复制到另一个上下文。

【讨论】:

【参考方案3】:
CGContextFillRect(context, CGRectMake(x,y,1,1));

【讨论】:

Swift 5.1 版本:context.fill(CGRect(x: xValue, y: yValue, width: 1, height: 1))【参考方案4】:

我有同样的问题 - 我发现最好的解决方案与上一个类似,但至少它不会留下看起来像“破折号”的东西......当然,应该确保 x/y 是两者都 > 0。

CGContextFillRect(context, CGRectMake(x - 0.5, y - 0.5, 1.0 , 1.0));

【讨论】:

【参考方案5】:

在将 line-caps 设置为 kCGLineCapRound 后,我得到了一个要绘制的点(零长度线)。默认 line-cap 没有长度,因此无法绘制。

点没有大小的说法是愚蠢的。线条没有宽度,但我们可以绘制它们(通过使用绘制状态的“线宽”)。一个点应该以完全相同的方式绘制,并且我相信它使用不同的线帽。

也许这种行为是新的?

【讨论】:

“点没有大小的说法是愚蠢的。”不,不是。一点就是:一个点。大小是至少一对点之间的距离。线帽是您绘制的线长度的补充;在圆帽的情况下,半径是线宽的一半,因此线宽为 1 pt 的圆帽的零长度线绘制两个半径为 1/2 pt 的帽,中间没有任何东西,从而形成一个 1 的圆pt直径。不,这种行为并不新鲜:线帽和 Quartz 的大部分其他部分都来自 PostScript 的 PDF,它可以追溯到 1985 年。 并不是说一个点有大小,只是说它没有大小是无法绘制它的愚蠢借口。一条线(作为一个数学概念)没有宽度,但我们可以画得很好。用圆帽绘制“零长度线”会在屏幕上呈现一个具有线宽直径的点。圆帽本质上是提供“点直径”设置。但是,如果原始海报特别希望设置一个屏幕像素的颜色,则应通过直接在位图上下文中设置值来完成,而不是使用基于路径的绘图例程。 这就是我要找的! CGContextSetLineWidth(desiredWidth); CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);然后从点到自身画一条线。【参考方案6】:

画一个很小的椭圆/圆并填充它!

CGContextAddEllipseInRect(Context,(CGRectMake (x_dot, y_dot, 3.0, 3.0));
CGContextDrawPath(Context, kCGPathFill);
CGContextStrokePath(Context);

我正在使用此代码在点音符中创建一个小点(3x3 像素)。

【讨论】:

【参考方案7】:

迅速 3:

 UIRectFill(CGRect(x: x, y: y, width: 1, height: 1))

【讨论】:

以上是关于如何使用 Core Graphics 绘制点?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Core Graphics 中绘制任何 PNG 格式

如何在 Core Graphics / Quartz 2D 中绘制圆角矩形?

在 iOS 中使用 Core Graphics 绘制 VU 表

使用 Core Graphics 绘制带有减去文本的路径

Core Graphics 中的内部阴影

使用 Core Graphics 绘制 UIImage?