【问题标题】:Why is line width in CoreGraphics on retina display rendered half width?为什么 Retina 显示器上 CoreGraphics 中的线宽呈现半宽?
【发布时间】:2012-08-06 16:48:38
【问题描述】:

我的流程是这样的:

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

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

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

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

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

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

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

【问题讨论】:

    标签: core-graphics retina-display cgcontext


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 1970-01-01
      相关资源
      最近更新 更多