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
-
详细报错信息,包含调用堆栈:
-
重现方式:
-
之前哪个版本是正常的 :
-
手机型号 :
-
手机浏览器 :
-
编辑器操作系统 :
-
编辑器之前是否有其它报错 :
-
出现概率:
-
额外线索: