Я все еще относительно новичок в работе с тегом canvas. Что я сделал до сих пор, так это нарисовал изображение на холсте. Моя цель — создать фальшивую анимацию дня/ночи, которая повторяется многократно.
Я исчерпал довольно много разных способов (фильтры SVG, CSS3 и т. д.) и думаю, что манипулирование пикселями холста — лучший способ в моем случае. Я пытаюсь:
- Перебрать все пиксели изображения
- Выберите определенную цветовую гамму
- Настроить на новый цвет
- Обновите холст
Вот код, который у меня есть до сих пор:
function gameLoop(){
requestAnimationFrame(gameLoop);
////////////////////////////////////////////////////////////////
// LOOP PIXEL DATA - PIXEL'S RGBA IS STORED IN SEQUENTIAL ARRAYS
////////////////////////////////////////////////////////////////
for(var i=0; i<data.length; i+=4){
red=data[i+0];
green=data[i+1];
blue=data[i+2];
alpha=data[i+3];
// GET HUE BY CONVERTING TO HSL
var hsl=rgbToHsl(red, green, blue);
var hue=hsl.h*360;
// CHANGE SET COLORRANGE TO NEW COLORSHIFT
if(hue>colorRangeStart && hue<colorRangeEnd){
var newRgb=hslToRgb(hsl.h+colorShift, hsl.s, hsl.l);
data[i+0]=newRgb.r;
data[i+1]=newRgb.g;
data[i+2]=newRgb.b;
data[i+3]=255;
};
};
// UPDATE CANVAS
ctx.putImageData(imgData, 0, 0);
};
Код работает и выбирает диапазоны оттенков и сдвигает их один раз, но невероятно тормозит. Размеры холста примерно 500x1024.
Мои вопросы:
- Можно ли улучшить производительность?
- Есть ли лучший способ выполнить заданную анимацию смены оттенка?
Спасибо!