2017-01-30 5 views
0

Я делаю некоторые основные линии чертежа, используя UIGraphicsBeginImageContextWithOptions:UIImage размер больше, чем то, что я поставил его

UIGraphicsBeginImageContextWithOptions(size, false, 0.0) 
    let path = UIGraphicsGetCurrentContext() 
    path!.setLineWidth(1.5) 
.... 
    x = (az/360) * Double(size.width) 
    y = halfheight - Double(alt/90 * halfheight) 
    path?.addLine(to: CGPoint(x:x, y:y)) 
    path?.strokePath() 
.... 
    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    //DEBUGGING - makes quick look work 
    let _ = image!.cgImage 
    return image! 

отладчик сообщает правильный размер для изображения, 1440x960. Но когда я использую QuickLook, изображение составляет 2880 × 1920 пикселей. Мне любопытно, если есть очевидная причина для этого? Это что-то, что делает quicklook, или Preview?

ответ

1

отладчик, скорее всего, дает вам размер в точках и Quick Look будет давать вам размер в пикселях .

Проблема заключается в том, что, пройдя 0 в параметре scaleUIGraphicsBeginImageContextWithOptions, вы используете масштаб экрана устройства для масштаба контекста. Таким образом, если вы используете устройство с дисплеем 2x и вводите размер 1440 x 960, вы получите контекст с разрешением 2880 x 1920 пикселей.

Если вы хотите работать с пикселями вместо точек, то просто передать 1 в параметр scale:

UIGraphicsBeginImageContextWithOptions(size, false, 1) 

Или использовать эквивалентный UIGraphicsBeginImageContext(_:) вызов:

UIGraphicsBeginImageContext(size) 
+0

Самый отличный ответ, спасибо Хэмиш , –

Смежные вопросы