Я новичок в работе с элементами холста и пытаюсь нарисовать полноэкранное изображение, а затем сделать некоторые пиксельные модификации. Я написал небольшой метод для этого, и загрузка изображения работает отлично, но изменение размера окна браузера ужасно медленное - даже с помощью дросселя.Обновление Canvas on Window Resize
Вот мой метод для рисования изображения на холст, и применить эффект изображения фильтра к нему:
drawCanvas:function(obj,src,onResize){
var img=new Image(),
objData=$.data(obj),
canvas=Plugin.OBJ.$Canvas[0],
ctx=canvas.getContext("2d"),
win=$(window),
winW=win.width(),
winH=win.height();
img.src=src;
Plugin.CanvasSRC=src;
img.onload=function(){
var imgW=img.width,
imgH=img.height,
ratio=imgW/imgH;
newH=(Math.round(winW/ratio)<winH)?winH:Math.round(winW/ratio),
winW=(newH<winH)?$win.width():Math.round(newH*ratio);
canvas.width=winW; canvas.height=newH;
ctx.drawImage(img,0,0,winW,newH);
var imgdata=ctx.getImageData(0,0,winW,winH),
pix=imgdata.data,
l=pix.length,
filter=objData.bg_pic_filter;
switch(filter){ ... this section does the pixel manipulation ...};
// APPLY THE FILTER && FADE IN
ctx.putImageData(imgdata,0,0);
};
},
Надеюсь, я не слишком невероятно от этого, но мне интересно, если есть лучший способ просто нарисовать изображение на полноэкранном холсте, но сохраните его размеры, аналогичные размеру фона: обложка? Эти изображения также используют фильтры манипуляции с пикселями. Можно ли просто изменить размер холста при изменении размера окна, не переделывая его и повторно применяя фильтр каждый раз? Спасибо!
Возможно, у вас может быть экранный холст фиксированного размера, где вы будете делать все ваши вычисления, а затем иметь еще один на экране и просто скопировать изображение с первого на размер? или даже создать изображение с первого холста и просто показать его? идея состоит в том, чтобы кэшировать результаты расчета и не переделывать работу при каждом изменении размера. – akonsu
Спасибо :) Как бы я это сделал? – Aaron
Я бы использовал 'document.createElement (" canvas ")'. Просто не присоединяйте его к DOM. – akonsu