Voici le code qui fonctionne parfaitement bien dans Firefox, mais je ne comprends pas pourquoi cela ne fonctionne pas dans les navigateurs Webkit! Remarque: Im utilisant jQuery pour sélectionner l'élément canvas.HTML5 Canvas flip fonction verticale fonctionne dans Firefox mais pas Chrome ou Safari. Pourquoi?
(function()
{
flipV=function(imageData)
{
var n = new Array();
var d = imageData.data;
// loop through over row of pixels
for (var row=0;row<imageData.height;row++)
{
// loop over every column
for (var col=0;col<imageData.width;col++)
{
var si,di,sp,dp;
// source pixel
sp=(imageData.width*row)+col;
// destination pixel
dp=(imageData.width*((imageData.height-1)-row))+col;
// source and destination indexes, will always reference the red pixel
si=sp*4;
di=dp*4;
n[di]=d[si]; // red
n[di+1]=d[si+1]; // green
n[di+2]=d[si+2]; // blue
n[di+3]=d[si+3]; // alpha
}
}
imageData.data=n;
return imageData;
};
var imgs = ['/images/myimage.png'];
var $c=$('#canvas');
var cxt=$c[0].getContext('2d');
var w=$c.width();
var h=$c.height();
var img1 = new Image();
img1.onload=function()
{
cxt.drawImage(img1,0,0,img1.width,img1.height,0,0,w,h);
imageData = flipV(cxt.getImageData(0,0,w,h));
cxt.putImageData(imageData,0,0)
};
img1.src=imgs[0];
}
)();
@Mathew En fait, les autres filtres que j'utilise getImageData(), tels que l'échelle de gris ou l'invert, fonctionnent parfaitement avec les images locales. Il semble être juste ce filtre flipV qui a un problème. J'avais déjà essayé la mise à l'échelle négative mais j'avais des problèmes avec un "INDEX_SIZE_ERR". Je me rends compte que c'est parce que j'utilise drawImage pour recadrer la source et placer la - sur la mauvaise hauteur var. Vous avez raison de dire que la mise à l'échelle négative est une méthode beaucoup plus simple que la modification d'imageData, bien que je veuille encore savoir pourquoi mon filtre fonctionne en FF et non en Webkit. – talentedmrjones
J'avais l'impression que ce nouveau tableau pourrait avoir quelque chose à voir avec ça. Merci d'avoir expérimenté et confirmé! Vous avez en effet raison de dire que la mise à l'échelle négative est une façon bien meilleure, plus facile et plus élégante de gérer le flip, donc je vais continuer avec cette méthode. – talentedmrjones