我的过程是这样的:为什么在视网膜显示器上CoreGraphics中的线宽呈现半宽?
- 定义一个矩形我想画的,用点的尺寸。
- 限定
CGFloat scale = [[UIScreen mainsScreen] scale]
- 乘以矩形的大小由秤
- 创建使用图像上下文中
CGBitmapContextCreate
- 绘图
- 呼叫
CGBitmapContextCreateImage
- 呼叫
UIImage imageWithCGImage:scale:orientation
矩形大小的图像上下文:与适当的规模。
我以为这总是在视网膜和老的屏幕上产生完美的图像,但一直没有密切关注线对比度/厚度。一般来说,笔画与填充物有很高的对比度,所以直到现在我才注意到线条与填充线之间的低对比度。
我想也许我误解了用户空间,但我认为这只是通过缩放直接转换,并应用了转换。除了视网膜屏幕双倍缩放外,在我的特殊情况下没有应用缩放和变换。
尝试呈现2像素线而不是1像素更容易解释:当我呼叫 UIContextSetLineWidth(context, 2)
时,线在Retina模拟器上渲染为1像素厚。 1像素!但这应该是两个像素,在视网膜显示器上。
UIContextSetLineWidth(context, 2 * scale)
会在视网膜屏幕上产生一条宽度为两个像素的线条,但我预计它会是4个像素。
UIContextSetLineWidth(context, 1)
产生部分透明的1像素宽线。我了解跨越路径的笔画,所以我更喜欢用2像素宽的笔画和路径在像素边界上谈话。
我需要了解为什么渲染的线宽被分成两半。