我从画布中得到了RGBA图像,并使用了typedArray来移除alpha通道。
// data - arr from canvas.
// [1,2,3,255, 1,2,3,255, 1,2,3,255,]
// R G B A R G B A R G B A
const delta = 4;
const length = data.length;
const newLength = length - length / delta;
const rgbArr = new Uint8Array(newLength);
let j = 0;
for (i = 0; i < data.length; i = i + delta) {
rgbArr[j] = data[i]; // R
rgbArr[j + 1] = data[i + 1]; // G
rgbArr[j + 2] = data[i + 2]; // B
j = j + 3;
}
// rgbArr [1,2,3, 1,2,3, 1,2,3]
我将每3个字节复制到新的Uint8Array中。有没有更优化的方法可以避免字节拷贝?
copyWithin
解决方案所做的事情——而且不会在末尾截断尾巴,因为它太慢了。 - Christian Fritz