@property(cc.Node)
target: cc.Node = null as any;
onLoad() { }
start() {
let width = this.target.width;
let height = this.target.height;
let c_node = new cc.Node();
c_node.parent = cc.director.getScene();
let camera = c_node.addComponent(cc.Camera);
// 设置你想要的截图内容的 cullingMask
camera.cullingMask = 0xffffffff;
// camera.zoomRatio = 1;
console.log("camera.zoomRatio", camera.zoomRatio);
// 新建一个 RenderTexture,并且设置 camera 的 targetTexture 为新建的 RenderTexture,这样 camera 的内容将会渲染到新建的 RenderTexture 中。
let renderTexture = new cc.RenderTexture();
//@ts-ignore
let gl = cc.game._renderContext;
// 如果截图内容中不包含 Mask 组件,可以不用传递第三个参数
renderTexture.initWithSize(width, height, gl.STENCIL_INDEX8);
camera.targetTexture = renderTexture;
// 渲染一次摄像机,即更新一次内容到 RenderTexture 中
camera.render(this.target);
// 这样我们就能从 RenderTexture 中获取到数据了
let data = renderTexture.readPixels();
// 接下来就可以对这些数据进行操作了
let canvas = document.createElement('canvas');
let ctx = canvas.getContext('2d');
canvas.width = renderTexture.width;
canvas.height = renderTexture.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 texture = new cc.Texture2D();
texture.initWithElement(canvas);
let spriteFrame = new cc.SpriteFrame();
spriteFrame.setTexture(texture);
let node = new cc.Node();
node.addComponent(cc.Sprite).spriteFrame = spriteFrame
let s = spriteFrame.getRect()
node.width = s.width;
node.height = s.height;
node.parent = this.node;
node.x = 0;
node.y = 300;
}
这种方式 获得截图 图片变小了