Хорошо, поэтому после дальнейшего исследования я обнаружил, что ошибка заключалась в попытке создать CGImage без контекста.
Итак, пара строк решила это.
Сначала UIImage преобразуется в CIImage с помощью
let ciImage = CIImage(image: screenshot)
, затем CIImage преобразуется в CGImage с context
let context = CIContext(options: nil)
let cgImage = context.createCGImage(ciImage!, from: ciImage!.extent)
теперь cgImage можно обрезать с помощью
let crop = CGRect(x: 0,
y: 0,
width: 200,
height: 200)
let cropedImage = cgImage!.cropping(to: crop)
и, наконец, полученный обрезанный CGImage можно превратить в UIImage и вернуть функцией
return UIImage(cgImage: cropedImage!)
По-видимому, вы не можете go из UIImage прямо в CGImage.
Внимание к размерам и масштабу, так как один использует точки в качестве эталона, а другие пиксели ... поэтому вам нужно выполнить некоторые математические вычисления чтобы получить точные позиции обрезки для того, что вы хотите.