视网膜屏幕下像素对齐计算方法

Dec 03, 2019 • 预计阅读时间 1 分钟

使用 CoreGraphics 裁剪图片的时候如果计算后的尺寸没有像素对齐,绘制的图像就会有 1px 的透明边框。

像素对齐的算法:

例如需要计算 0.5pt 的高度在当前屏幕下需要多少 px(像素)进行显示:

let scale = UIScreen.main.scale
let h = ceil(0.5 * scale) / scale

scale 在 iphone8 上是 2 ,在 iphone8 plus 上是 3.

Note

UIKit 的方法 UIGraphicsBeginImageContextWithOptions 会对传入的 size 进行像素对齐,不需要手动修正。

使用代码进行验证:

UIGraphicsBeginImageContextWithOptions(CGSize(width: 0.5, height: 0.5), false, 0)
let img = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

生成的 img 的 size 不是 0.5x0.5,而是进行了像素对齐的大小:

iPhone 8 :0.5 x 0.5

iPhone 8 plus :0.6666666 x 0.6666666

iOS
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

了解 Image 的 capInsets 和 resizingMode

在 netlify 使用最新版本的 hugo 和 go 构建网站