【发布时间】: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