Как я могу улучшить производительность CGContextFillRect и CGContextDrawImage - PullRequest
2 голосов
/ 08 июля 2011

Эти две функции в настоящее время являются моим узким местом. Я работаю с очень большими растровыми изображениями.

Как мне улучшить их производительность?

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Вы можете кэшировать меньшие версии ваших растровых изображений, которые вы создаете перед первым рисованием, а затем просто рисовать уменьшенные образцы вместо полноценных 15-мегапиксельных элементов.

Затем снова убедитесь, что вы рисуете только то, что необходимо, т. Е. В 'drawRect: (NSRect) rect' рисуете только внутри прямоугольника (если это абсолютно не необходимо). И постарайтесь не выполнять рисунки вне этого метода.

1 голос
/ 09 июля 2011

Если вы рисуете большие фоновые изображения с движущимся содержимым на переднем плане, рассмотрите возможность использования слоя NSView, добавления слоя и установки его фонового изображения. Затем вы можете нарисовать ваш контент в других слоях (или на слоях NSViews) над фоновым слоем, и представлению никогда не потребуется перерисовывать фоновое изображение, поскольку оно хранится в текстурной памяти графического процессора. Ваше текущее изображение слишком велико для одного CALayer (CALayer s ограничены максимальным размером текстуры OpenGL 2048 x 2048), поэтому вам, вероятно, придется разбить его на плитки.

В противном случае, как упомянул @iolo, вы должны убедиться, что перерисовываете только те части представления, которые действительно нуждаются в обновлении.

...