Улучшить производительность рисования прозрачного изображения - PullRequest
3 голосов
/ 04 августа 2011

Моя цель Я бы хотел улучшить производительность рисования прозрачных изображений в анимации, используя тот факт, что фон за изображениями не меняется во время анимации.

Контекст Мне нужно создать анимацию из 100 изображений (~ 5сек).Я не могу использовать функцию startAnimating UIImageView, так как 100 изображений слишком велики, чтобы поместить их в память.Поэтому я решил использовать таймер и изменить непосредственно изображение в UIImageView.Проблема в том, что для прозрачных изображений рисование выполняется слишком медленно (5 кадров в секунду для полноэкранных изображений с прозрачностью; 22 кадра в секунду для изображений без прозрачности).

Когда запускается анимация, я знаю, что пиксель за пределами моих изображений не изменится, пока анимация не закончится.

Вопрос Есть ли способ улучшить производительность рисования моих прозрачных изображений, используя тот факт, что фон за изображением не меняется во время анимации?

Обратите внимание, что фон за пределами изображения может измениться до запуска анимации, поэтому я не могу поместить фон непосредственно в мои изображения.

Ответы [ 2 ]

2 голосов
/ 11 августа 2011

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

Вы должны иметь возможность использовать -animationImages функцию UIImageView, поскольку она не должна загружать и сохранять все изображения в памяти, а загружать их, когда они необходимы для отображения. Вы пробовали этот метод, и если да, каковы были результаты?

Единственный другой вариант, который я могу придумать, - это перейти к использованию текстур OpenGL, возможно, используя сжатые текстуры PVRTC, которые используют меньше памяти, чтобы вы могли сохранять больше их загруженными и избежать замедления из-за декомпрессии изображений во время анимации. работает.

0 голосов
/ 12 августа 2011

Вы пытались отключить прозрачность в UIImageView и установить его фон [UIColor clearColor]?Это должно улучшить производительность компоновки в UIView.

Вы также можете изучить CGLayers вместо использования UIImageView и чтения изображений на ходу в фоновом потоке.Это, вероятно, то, что делает UIImageView с animationImages, но вы должны быть в состоянии экономить память таким образом, если вы можете загружать изображения достаточно быстро.

Связаны ли вы с вводом / выводом или графической производительностью?Вы можете попытаться загрузить 3 изображения в память с помощью NSData и распаковать / показать их на экране, не нажимая на диск, чтобы узнать, не является ли это вашим узким местом.Вы также можете попробовать использовать распакованные изображения в памяти, чтобы узнать, является ли ограничивающим фактором шаг распаковки (вы используете PNG вместо JPEG, верно?).

...