截图功能,Web下保存的图片是黑色的,另外jsb.saveImageData API没有了,原生平台怎么实现截图功能

protected onSaveTap(): void {
// TODO
let node = new cc.Node();
node.parent = cc.director.getScene();
node.anchorX = node.anchorY = 0.5;
node.x = cc.visibleRect.width / 2;
node.y = cc.visibleRect.height / 2;

    let camera = node.addComponent(cc.Camera);
    camera.cullingMask = 0xffffffff;
    let texture: cc.RenderTexture = new cc.RenderTexture();
    texture.initWithSize(cc.visibleRect.width, cc.visibleRect.height, cc.RenderTexture.DepthStencilFormat.RB_FMT_D16);
    camera.targetTexture = texture;
    camera.render(node);

    let data = texture.readPixels();

    // 接下来就可以对这些数据进行操作了
    let canvas = document.createElement('canvas');
    let ctx = canvas.getContext('2d');
    let width = canvas.width = texture.width;
    let height = canvas.height = texture.height;
    let rowBytes = width * 4;
    for (let row = 0; row < height; row++) {
        let srow = height - 1 - row;
        let imageData = ctx.createImageData(width, 1);
        let start = srow * width * 4;
        for (let i = 0; i < rowBytes; i++) {
            imageData.data[i] = data[start + i];
        }
        ctx.putImageData(imageData, 0, row);
    }

    let dataURL = canvas.toDataURL("image/jpeg");
    let img = document.createElement("img");
    img.setAttribute('crossOrigin', 'anonymous');
    img.src = dataURL;
    img.onload = () => {
        let texture: cc.Texture2D = new cc.Texture2D();
        texture.initWithElement(img);
        this.tempSprite.spriteFrame = new cc.SpriteFrame(texture);
    }
    if (cc.sys.isBrowser) {
        let alink = document.createElement('a');
        let parts = dataURL.split(';base64,');
        let contentType = parts[0].split(":")[1];
        let raw = window.atob(parts[1]);
        let rawLength = raw.length;
        let u8 = new Uint8Array(rawLength);
        for (var i = 0; i < rawLength; ++i) {
            u8[i] = raw.charCodeAt(i);
        }
        let blob = new Blob([u8], { type: contentType });
        let evt = document.createEvent("MouseEvents");
        evt.initEvent("click", false, false);
        alink.download = "OpenFaceImage";
        alink.href = URL.createObjectURL(blob);
        alink.click();
    } else {
        
    }
}
  • Creator 版本:2.4.0

  • 目标平台: Web / iOS / Android

  • 详细报错信息,包含调用堆栈:

  • 重现方式:

  • 之前哪个版本是正常的 :

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :

  • 编辑器之前是否有其它报错 :

  • 出现概率:

  • 额外线索:

同问jsb.saveImageDataAPI,没有怎么保存图片