Преобразование между UIImage и CGImage является сложной операцией

#ios

#iOS

Вопрос:

 //sample 1
uIImage.cgImage

//sample 2
UIImage(cgImage: cgImage)
  

В приведенном выше коде пример 1 преобразует UIImage в CGImage, а пример 2 преобразует CGImage в UIImage.


Мой вопрос:

Являются ли sample 1 и sample 2 тяжелой или легкой операцией? Если он просто получит CGImage из UIImage или сконструирует UIImage для переноса CGImage?

Комментарии:

1. Пока ресурс не был удален из-за нехватки памяти, извлечение связанного с ним CGImage не является дорогостоящим. Как правило, дорогостоящим является использование изображения (которое может вызвать распаковку ресурса).

Ответ №1:

Пример: 1

Если данные изображения были удалены из-за ограничений памяти, вызов этого метода заставляет эти данные загружаться обратно в память. Перезагрузка данных изображения может привести к снижению производительности.

Пожалуйста, обратитесь:https://developer.apple.com/documentation/uikit/uiimage/1624159-cgimage

Пример: 2

К сожалению, для этого нет доступных документов.

Но я лично проверил продолжительность преобразования как для примеров 1, так и для примеров 2, используя приведенный ниже код.

 //Image Size: 3 MB
let image = UIImage.init(named: "2.jpg")!    
print("Start Conversion: Image to CGImage",Date())
let cgImageSample = image.cgImage
print("End Conversion: Image to CGImage",Date())        
print("Start Conversion: CGImage to UIImage",Date())    
let imageConverted = UIImage(cgImage: cgImageSample!)
print("End Conversion:CGImage to UIImage",Date())
  

Журнал консоли:

Начать преобразование: изображение в CGImage 2019-03-18 05:17:02 0000 Конец

Преобразование: Изображение в CGImage 2019-03-18 05:17:03 0000 Начало

Преобразование: CGImage в UIImage 2019-03-18 05:17:03 0000 Конец

Преобразование: CGImage в UIImage 2019-03-18 05:17:04 0000

Вывод: Обе операции заняли 1 секунду для преобразования.

Предложение: Если вы хотите преобразовать много изображений, то это была тяжелая операция. Если вы хотите преобразовать одно изображение, то это не слишком сильно влияет на производительность.

Комментарии:

1. Да, хотя это, очевидно, актуально только при использовании UIImage(named:) . Если вы создали экземпляр изображения из Data , URL или создали его программно, это не применяется.