Swift: коэффициент масштабирования UIGraphicsBeginImageContextWithOptions установлен на 0, но не применяется

Раньше я изменял размер изображения с помощью следующего кода, и он отлично работал в отношении коэффициента масштабирования. Теперь со Swift 3 я не могу понять, почему не учитывается коэффициент масштабирования. Размер изображения изменен, но коэффициент масштабирования не применяется. Ты знаешь почему?

let layer = self.imageview.layer

UIGraphicsBeginImageContextWithOptions(layer.bounds.size, true, 0)

layer.render(in: UIGraphicsGetCurrentContext()!)
let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

print("SCALED IMAGE SIZE IS \(scaledImage!.size)")
print(scaledImage!.scale)

Например, если я сделаю снимок экрана на iPhone 5, размер изображения будет 320 * 568. Раньше я получал 640 * 1136 с точно таким же кодом. Что может привести к тому, что коэффициент масштабирования не применяется?

Когда я печатаю масштаб изображения, он будет печатать 1, 2 или 3 в зависимости от разрешения устройства, но не будет применяться к изображению, взятому из контекста.


person Sam    schedule 24.09.2016    source источник
comment
@LeoDabus уже пробовал, но не применил. Я также пробовал UIScreen.main.scale.   -  person Sam    schedule 24.09.2016
comment
@LeoDabus Я уже проверил ваш пост, прежде чем задать вопрос :) Вопрос не относится к конкретному изображению, это может быть любой слой. Проблема в том, что этот способ получения изображения из графического контекста всегда применял правильный коэффициент масштабирования, теперь он его не учитывает. Это больше о том, почему коэффициент масштабирования не применяется.   -  person Sam    schedule 24.09.2016


Ответы (1)


scaledImage!.size не возвращает размер изображения в пикселях.

CGImageGetWidth и CGImageGetHeight возвращают одинаковый размер (в пикселях), то есть image.size * image.scale

Если вы хотите проверить это, сначала вам нужно import CoreGraphics

let imageSize = scaledImage!.size //(320,568)
let imageWidthInPixel = CGImageGetWidth(scaledImage as! CGImage) //640
let imageHeightInPixel = CGImageGetHeight(scaledImage as! CGImage) //1136
person ronan    schedule 24.09.2016
comment
Спасибо за ваше уместное замечание. На самом деле это изменилось в Swift 3, раньше он возвращал размер пикселя, поэтому я запутался. Большое спасибо! - person Sam; 24.09.2016
comment
Обновлено для Swift 4.1: let cgimage = scaledImage?.cgImage print("Image size = \(scaledImage?.size)") print("cgimage width = \(cgimage?.width)") print("cgimage height = \(cgimage?.height)") И пример результата: Image size = Optional((320.0, 320.0)) cgimage width = Optional(640) cgimage height = Optional(640) - person Nico teWinkel; 14.09.2018