Если вы запускаете цикл каждый раз, когда рисуете изображение, цикл может быть узким местом. Существует совершенно ненужное выделение объектов, из-за чего сборщик мусора будет запускаться довольно часто.
Я предполагаю, что colorBK имеет значение int. Если это так, вы просто создаете и инициализируете объект Color и просите его вернуть значение rgb, присвоенное массиву rgb. Что на самом деле происходит, так это то, что вы присваиваете значение colorBK в массиве rgb. Таким образом, эквивалентной и более эффективной реализацией будет rgb[i] = colorBK.
Чтобы оптимизировать это еще больше, вы можете присвоить значение colorBK последней локальной переменной. Это позволит избежать получения значения поля снова и снова. Таким образом, цикл может выглядеть так:
final int color = colorBK;
for( int i = frameOffset; i < colorClock; i++ ) {
rgb[i] = color;
}
Чтобы получить еще больший прирост производительности, вы должны думать, что если есть совершенно другие способы сделать это. Поскольку приведенный выше пример просто меняет некоторые пиксели на определенный цвет, я мог бы предположить, что это можно сделать с изображением и парой fillRects.
Таким образом, вы должны заполнить прямоугольник за изображением желаемым цветом (в данном случае colorBK). Если изображение имеет прозрачные пиксели в этих областях, описанный выше цикл изменяется, они остаются неизменными на холсте, и получается тот же эффект. Это может быть более эффективным, поскольку графические методы лучше оптимизированы и не требуют интенсивного использования массива.
person
Lauri
schedule
17.02.2010