我的过程如下所示:
- 使用点尺寸定义我要绘制的矩形。
- 定义
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 像素宽的笔划和像素边界上的路径来讨论。
我需要了解为什么渲染的线宽被分成两半。