Статический фон для CGContext

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

Я использую CGContext для рисования различных слоев графического представления данных в реальном времени, которые должны обновляться с разумной частотой кадров не менее 50 кадров в секунду. Я хочу использовать статическое изображение в качестве фона. Перерисовка этого изображения с использованием контекста для каждого цикла значительно замедляет частоту кадров. Я подумал о том, чтобы просто использовать UIImageView для отображения изображения один раз. Проблема здесь в том, что я хочу использовать режимы наложения, предоставляемые CGContext, для достижения более сложных наложений, чем просто установка альфа-значения для каждого слоя. Поскольку UIImageView, отображающий фоновое изображение, не является частью контекста, на него не влияют режимы наложения. Кто-нибудь знает, как добиться желаемого поведения, не слишком сильно влияя на частоту кадров? Спасибо за вашу помощь.


person Infamous Karlheinz    schedule 14.07.2011    source источник


Ответы (1)


Вызов CGContextDrawImage с CGImageRef с теми же размерами, что и у CGRect, выполняется быстро. Настройте CGImageRef с фоновым изображением в коде, который запускается реже, чем каждый кадр, например код инициализации представления. Если это фоновое изображение меняется, создайте изображение в логическом коде программы, а не в коде обновления отрисовки.

Худшее, что вы можете сделать, это каждый раз обращаться к изображению из файла. Некоторое время можно сэкономить, если не обращаться к CGImageRef из более тяжелого объекта. Такой вызов, как [someUIImageObject CGImage], добавит накладные расходы на отправку сообщения, тогда как доступ к ivar типа CGImageRef в том же объекте, содержащем код рисования, не будет.

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

person Mr. Berna    schedule 15.07.2011
comment
Спасибо за ответ. Я пытался использовать CGImageRef с самого начала. До этого я использовал метод drawInRect UIImage, который также использует соответствующий объект CGImageRef для отрисовки изображения в контексте. К сожалению, с точки зрения производительности заметного улучшения нет, поэтому мне, вероятно, придется найти другое решение. В очередной раз благодарим за помощь. - person Infamous Karlheinz; 18.07.2011