UIGraphicsBeginImageContext против CGBitmapContextСоздать на iOS - PullRequest
13 голосов
/ 15 декабря 2010

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

1 Ответ

10 голосов
/ 15 декабря 2010

Согласно справочнику 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.

...