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

NSImage против CIImage против CGImage?

Когда я должен использовать каждый?

4b9b3361

Ответ 1

NSImage - абстрактный тип данных, который может представлять множество различных типов изображений, а также множественные представления изображения. Это часто полезно, когда фактический тип изображения не важен для того, что вы пытаетесь сделать. Это также единственный класс изображений, который AppKit будет принимать в своих API-интерфейсах (NSImageView и т.д.).

CGImage может представлять только растровые изображения. Если вам нужно опуститься и испортить фактические данные растрового изображения, CGImage - подходящий тип. Операции в CoreGraphics, такие как режимы наложения и маскировка, требуют CGImageRefs. CGImageRefs можно использовать для создания NSBitmapImageRefs, который затем может быть добавлен в NSImage.

Я думаю, что документация описывает лучший CIImage:

Хотя объект CIImage имеет связанные с ним данные изображения, это не изображение. Вы можете представить объект CIImage как образ "рецепт". Объект CIImage имеет всю информацию, необходимую для создания изображения, но Core Image фактически не отображает изображение, пока ему не говорят об этом. Этот метод "ленивой оценки" позволяет Core Image работать максимально эффективно.

CIImages - это тип, необходимый для использования различных фильтров Core Image, оптимизированных для GPU, которые поставляются с Mac OS X, но, как и CGImageRefs, они также могут быть преобразованы в NSBitmapImageReps.