2.0.1版本 截图 mask异常,不该显示的显示出来了

  • Creator 版本:2.0.1

  • 目标平台: Facebook Instant Game

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

  • 重现方式:

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

  • 手机型号 :iPhone6 plus 小米6

  • 手机浏览器 :

  • 编辑器操作系统 :

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

  • 出现概率:100%

  • 额外线索:

使用了2.0.1版本的摄像机截图功能,代码用的是官方的例子,
截图中人物头像用了mask,但是截图以后,头像有问题

这个是在facebook中截图分享的样子

这是正常画面中的样子

以下是场景中的头像结构

mask配置

以下是截图的代码

static Screenshot(rangeImg:cc.Node)
    {
        let width=rangeImg.width;
        let height=rangeImg.height;

        let node = new cc.Node();
        node.parent = rangeImg;
        let camera = node.addComponent(cc.Camera);
        node.x=0;
        node.y=0;

        // 设置你想要的截图内容的 cullingMask
        camera.cullingMask = 0xffffffff;

        // 新建一个 RenderTexture,并且设置 camera 的 targetTexture 为新建的 RenderTexture,这样 camera 的内容将会渲染到新建的 RenderTexture 中。
        let texture = new cc.RenderTexture();
        // 如果截图内容中不包含 Mask 组件,可以不用传递第三个参数
        texture.initWithSize(width,height);
        camera.targetTexture = texture;

        // 渲染一次摄像机,即更新一次内容到 RenderTexture 中
        camera.render(null);

        // 这样我们就能从 RenderTexture 中获取到数据了
        let data = texture.readPixels();

        // 接下来就可以对这些数据进行操作了
        let tempCanvas = document.createElement('canvas');
        let ctx = tempCanvas.getContext('2d');
        tempCanvas.width = texture.width;
        tempCanvas.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);
        }

        return tempCanvas.toDataURL("image/jpeg");
        //let dataURL = tempCanvas.toDataURL("image/png");
        //let img = document.createElement("img");
        //img.src = dataURL;
    }

请教下有什么办法修复吗?

人工顶一顶

1赞

@panda

遇到同样问题,请问解决了,分享一下解决方法吧。

升级到新版本的就可以了

请问解决了吗?
截图mask组件后可以保留透明属性吗?

更新版本啊