我是使用画布元素的新手,正在尝试绘制全屏图像,然后进行一些像素修改。我为此编写了一个小方法,并且加载图像效果很好,但是调整浏览器窗口的大小非常慢 - 即使使用节流器也是如此。
这是我在画布上绘制图像并对其应用图像滤镜效果的方法:
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);
};
},
希望我不会对此感到难以置信,但我想知道是否有更好的方法可以将图像简单地绘制到全屏画布上,但让它保持与背景大小相似的尺寸:封面?这些图像也使用像素操作过滤器。是否可以在窗口调整大小时调整画布的大小,而不必每次都重新绘制并重新应用过滤器?谢谢!