本文共 2561 字,大约阅读时间需要 8 分钟。
onToast() { //0 //clearFlags一般除了最底层的摄像机里需要全部打勾,其他摄像机就不需要勾选了, //不然上层摄像机(depth == -1)会把下层的摄像机(depth == -2)画面清除。//1. // depth// 摄像机深度,用于决定摄像机的渲染顺序。值越大,则摄像机越晚被渲染。// 越晚被渲染,场景显示的是最晚的摄像机 所照到的东西。// 我这Main Camera应该是最晚被渲染(值最大)//2.分组// Main Camera不包含所要截图分组// Camera只包含所要截图分组// 被截图的节点,默认分组default要修改。//3.摄像机要跟随这所要截取的节点,否则有可能截取不到。(可以跟随也可以不跟随)// 如果不跟随,则可以利用第0条,将想要截取的图,用下层摄像机抓取,并同时利用上层摄像机清除下层摄像机的画面。// 场景显示的是最上层摄像机所抓取的场景。下层摄像机此时是可抓取所要截取的同组节点。 cc.Camera.cameras; cc.log("cc.Camera.cameras ==", cc.Camera.cameras); //let node = new cc.Node(); //node.parent = cc.director.getScene(); //let camera = node.addComponent(cc.Camera); let smile = cc.find("smile", this.node); //会通过查找当前所有摄像机的 cullingMask 是否包含节点的 group 来获取第一个匹配的摄像机。 let camera = cc.Camera.findCamera(smile); cc.log("camera ==", camera); camera.x = smile.x; camera.y = smile.y; //camera = cc.Camera.cameras[1]; // 设置你想要的截图内容的 cullingMask //camera.cullingMask = 0xffffffff; // 新建一个 RenderTexture,并且设置 camera 的 targetTexture 为新建的 RenderTexture,这样 camera 的内容将会渲染到新建的 RenderTexture 中。 let texture = new cc.RenderTexture(); let gl = cc.game._renderContext; let x = smile.width*5; let y = smile.height*5; // 如果截图内容中不包含 Mask 组件,可以不用传递第三个参数 texture.initWithSize(cc.visibleRect.width, cc.visibleRect.height, gl.STENCIL_INDEX8); //texture.readPixels (null, x, y, x, y) //texture.initWithSize(x, y); camera.targetTexture = texture; // 渲染一次摄像机,即更新一次内容到 RenderTexture 中 camera.render(); // 这样我们就能从 RenderTexture 中获取到数据了 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; canvas.width = texture.width; 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.src = dataURL; cc.log("dataURL == ",dataURL ); },
转载地址:http://easjz.baihongyu.com/