Подтвердить что ты не робот

UIGraphicsBeginImageContext vs CGBitmapContextCreate на iOS

Это может быть действительно глупый вопрос, но может ли кто-нибудь сказать мне разницу между созданием CGContextRef с использованием UIGraphicsBeginImageContext и использованием CGBitmapContextCreate для рисования на изображения? Особенно сейчас, поскольку чертеж UIKit является потокобезопасным, мне было интересно, есть ли какая-нибудь причина использовать CGBitmapContextCreate над UIGraphicsBeginImageContext.

4b9b3361

Ответ 1

В соответствии с Apple Справочник по функциям UIKit, который содержит дату закрытия 15 ноября 2010 года, UIGraphicsBeginImageContext и связанные функции все равно должны быть вызваны только на основной теме. Тот же текст повторяется в документации разработчика, которая поставляется с последним Xcode, 3.2.5. Тем не менее, он сообщает то же самое для UIGraphicsGetCurrentContext, который я явно понял как потокобезопасный. Я понял, что только UIGraphicsGetCurrentContext, а классы UIImage, UIColor и UIFont теперь потокобезопасны, а не все UIKit, но я не могу найти окончательную ссылку.

Независимо, UIGraphicsBeginImageContext - это оболочка UIKit, которая находится поверх CGBitmapContextCreate и уменьшает ее функциональность. В частности, вы ограничены изображениями цветового пространства RGBA с фиксированным порядком компонентов (хотя он варьируется в зависимости от версии iOS) и не может указать собственный целевой буфер для рисования. Так, например, бесполезно делать кучу состава CoreGraphics, а затем публиковать результат в OpenGL и бесполезно для графики конвейера, которую вы уже получили в какой-либо форме массива в CoreGraphics.

Однако, когда метод UIKit поддерживает необходимую функциональность и безопасен в использовании, нет никаких неотъемлемых преимуществ для методов CoreGraphics.