1
下面是在Firefox中完美运行的代码,但我不明白为什么它在Webkit浏览器中无法使用!注意:我使用jQuery来选择画布元素。HTML5 Canvas翻转垂直功能适用于Firefox,但不适用于Chrome或Safari。为什么?
(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实际上,其他使用getImageData()(如灰度或反转)的滤镜对本地图像工作得很好。它似乎只是这一个flipV滤波器有问题。 我以前曾尝试过负缩放,但遇到了“INDEX_SIZE_ERR”问题。刚刚意识到这是因为我使用drawImage也裁剪了源代码,并将错误的高度var放在了上面。 你说得对,负面缩放比修改imageData更容易,我仍然想知道为什么我的过滤器在FF而不是Webkit中工作。 – talentedmrjones 2010-08-11 16:39:57
我有一种感觉,那个新阵列可能与它有关。感谢您的试验和确认! 你的确是正确的,否定缩放是一个更好,更容易,更优雅的处理翻盖的方式,所以我会继续使用该方法。 – talentedmrjones 2010-08-11 21:06:34