1

我的过程如下所示:

  • 使用点尺寸定义我要绘制的矩形。
  • 定义CGFloat scale = [[UIScreen mainsScreen] scale]
  • 将矩形的大小乘以比例
  • 使用创建矩形大小的图像上下文CGBitmapContextCreate
  • 在图像上下文中绘制
  • 称呼CGBitmapContextCreateImage
  • call UIImage imageWithCGImage:scale:orientation:具有适当的规模。

我原以为这总是会在视网膜和旧屏幕上产生完美的图像,但一直没有密切关注线条对比度/厚度。一般来说,笔触与填充的对比度很高,所以直到现在我才注意到,线条和填充之间的对比度很低。

我想也许我误解了用户空间,但我认为这只是通过缩放和应用转换的直接转换。除了视网膜屏幕双重缩放之外,在我的特定情况下没有应用缩放和变换。

尝试渲染 2 像素线而不是 1 像素更容易解释:当我调用 时 UIContextSetLineWidth(context, 2),线在视网膜模拟器上被渲染为 1 像素粗。1个像素!但这应该是两个像素,在视网膜显示器上。

UIContextSetLineWidth(context, 2 * scale)在视网膜屏幕上产生一条 2 像素宽的线,但我希望它是 4 像素。

UIContextSetLineWidth(context, 1)生成一条部分透明的 1 像素宽的线。我了解跨越路径的笔划,所以我更喜欢用 2 像素宽的笔划和像素边界上的路径来讨论。

我需要了解为什么渲染的线宽被分成两半。

4

1 回答 1

1

我的错。我自己的 99% 的错误都是在我公开发布后自己解决的。

绘制代码包括构建和复制路径后的CGContextClip 。之后,可以应用填充,渐变或其他方式,然后绘制线条,所以一切都很好而且整洁。我专注于数学和特定的绘图代码,并没有注意到剪切线,但这会有效地减半笔画宽度。通常我会立即发现这样的逻辑错误,但因为它已发布到 SO,所以答案也在这里。

于 2012-08-06T18:20:41.807 回答