更新时间:2023-11-09 12:26:16
for(var y = 0; y for(var x = 0; x var offset =((width * y)+ x)* 4; //像素原点
//获取像素
var r = data [offset];
var g = data [offset + 1];
var b = data [offset + 2];
var a = data [offset + 3];
//计算镜像像素到右边的距离
var mirrorOffset =(width - (x * 2))* 4;
//获取镜像像素的颜色
data [offset + mirrorOffset] = r;
data [offset + 1 + mirrorOffset] = g;
data [offset + 2 + mirrorOffset] = b;
data [offset + 3 + mirrorOffset] = a;
}
}
我没有测试过,更多或更少)工作,或至少给你一个如何做的想法。
I have some image data in canvas, and now I need to take the left half of the image, flip it and apply it to the right, like a mirror effect.
Example, from this:
To this:
I got this far (I have the image data ready):
ctx.drawImage(this, 0, 0, 960, 540);
var imgData = ctx.getImageData(0,0,960,540);
// loop through the data and apply mirror ??
Width & height is known. Any ideas?
for(var y = 0; y < height; y++) {
for(var x = 0; x < width / 2; x++) { // divide by 2 to only loop through the left half of the image.
var offset = ((width* y) + x) * 4; // Pixel origin
// Get pixel
var r = data[offset];
var g = data[offset + 1];
var b = data[offset + 2];
var a = data[offset + 3];
// Calculate how far to the right the mirrored pixel is
var mirrorOffset = (width - (x * 2)) * 4;
// Get set mirrored pixel's colours
data[offset + mirrorOffset] = r;
data[offset + 1 + mirrorOffset] = g;
data[offset + 2 + mirrorOffset] = b;
data[offset + 3 + mirrorOffset] = a;
}
}
I haven't tested this, but it should (More-or less) work, or at least give you an idea of how to do it.