Если вы запускаете цикл каждый раз, когда рисуете изображение, петля может быть узким местом. Существует совершенно ненужное выделение объектов, которое заставит сборщик мусора работать довольно часто.
Я предполагаю, что цветBK является int. Если это так, вы просто создаете и инициализируете объект «Цвет» и просите его вернуть значение rgb, которое назначено массиву rgb. На самом деле происходит то, что вы назначаете значение colorBK в массиве rgb. Таким образом, эквивалентной и более эффективной реализацией будет rgb [i] = colorBK.
Чтобы оптимизировать это, вы можете присвоить значение colorBK конечной локальной переменной. Это позволит избежать повторного ввода значения поля. Таким образом, цикл может выглядеть следующим образом:
final int color = colorBK;
for(int i = frameOffset; i < colorClock; i++) {
rgb[i] = color;
}
Чтобы получить еще больше прироста производительности, вы должны думать, что если есть совершенно разные способы сделать это. Поскольку приведенный выше пример просто изменяет некоторые пиксели на определенный цвет, я могу предположить, что это можно сделать с изображением и несколькими fillRects.
Таким образом, вы должны заполнить прямоугольник за изображением нужного цвета (в данном случае colorBK). Если изображение имеет прозрачные пиксели в тех областях, которые были изменены выше, они остаются неизменными в холсте и получают тот же эффект. Это может быть более эффективным, поскольку графические методы лучше оптимизированы и не связаны с использованием большого массива.
Под «покраской», вы имеете в виду после преобразования RGB? Или выполняется ли указанное преобразование при каждом тике рендеринга? – jevon
Привет, петля окрашивания возникает после завершения обновления. Сначала меняю цвета на заданные пиксели, а затем Graphics2D.drawImage с новыми цветами пикселей. – Leonardo
Вы пробовали профилировать его? Какую IDE вы используете? У NetBeans встроен профайлер, и я считаю, что есть плагин для Eclipse. –