У меня есть приложение, которое рисует изображения из CGImage.
Сам CImage загружается с использованием CGImageSourceCreateImageAtIndex для создания изображения из файла PNG.
Это является частью механизма спрайтов- существует несколько изображений спрайтов в одном файле PNG, поэтому каждый спрайт имеет CGRect, определяющий, где он находится в CGImage.
Проблема в том, что CGContextDraw принимает только прямоугольник назначения - и растягивает исходный CGImage дозаполните его.
Итак, чтобы нарисовать каждое изображение спрайта, нам нужно создать несколько CGImage из исходного источника, используя CGImageCreateWithImageInRect ().
Сначала я подумал, что это будет «дешево»операция - не кажется необходимым, чтобы каждый CGImage содержал свою собственную копию битов изображений - однако профилирование показало, что использование CGImageCreateWithImageInRect () является довольно дорогой операцией.
Существует ли более оптимальный метод длянарисовать подраздел CGImage на CGContext, поэтому мне не нужно CGImageCreateWithImageInRect () так часто?
Учитывая отсутствие исходного прямоугольника и простоту создания CGImage из прямоугольника на CGImage, я начал подозревать, что, возможно, CGImage реализовал функцию копирования при записи.семантическая, где CGImage, созданный из CGImage, будет ссылаться на подчиненный объект из тех же физических битов, что и родительский.Профилирование, кажется, доказывает это неправильно: /