之前用device.copyTextureToBuffers方法读的数据,web上基于这个功能做了很多功能,在微信小游戏上实测时,提示“使用 OpenDataContext 后,“受限Canvas” 的 gl 上下文不能调用 readPixels”,有没有什么方法避开这个
试试这个。
public readPixels(tex: Texture2D, x: number = 0, y: number = 0): Uint8Array {
const gfxTexture = tex.getGFXTexture();
if (!gfxTexture) {
return null;
}
const { width, height } = gfxTexture;
const needSize = 4 * width * height;
const buffer = new Uint8Array(needSize);
const bufferViews: ArrayBufferView[] = [];
const regions: gfx.BufferTextureCopy[] = [];
const region0 = new gfx.BufferTextureCopy();
region0.texOffset.x = x;
region0.texOffset.y = y;
region0.texExtent.width = width;
region0.texExtent.height = height;
regions.push(region0);
bufferViews.push(buffer);
director.root.device.copyTextureToBuffers(gfxTexture, bufferViews, regions);
return buffer;
}
public getPixelColor(buffer: Uint8Array, width: number, x: number, y: number): Color {
if (buffer.length <= 0) {
return null;
}
const index: number = (y * width + x) * 4;
const r: number = buffer[index];
const g: number = buffer[index + 1];
const b: number = buffer[index + 2];
const a: number = buffer[index + 3];
// console.log(`第${x}行,第${y}列的像素颜色为:${r},${g},${b},${a}`)
return new Color(r, g, b, a);
}
