看你实际的需求了
1.截取当前屏幕,直接拿GameCanvas.toDataUrl
2.分享静态贴图?直接texture 取到对应的HtmlImageElement.toDataUrl()
这个如果是合图的美术资源,这里需要先根据SpriteFrame绘制到一个干净的canvas上,然后这个新建的canvas.toDataUrl()
3. 分享屏幕局部的图片?
canvas渲染:拿到GameCanvas,GameCanvas.getContext(“2d”).getImageData(x, y, width, height); x,y为屏幕坐标,宽高是要截取部分的宽高。然后创建一个新的canvas,将ImageData放到新的canvas绘制,这个新的canvas.toDataURL()导出base64
webgl渲染:
cc.eventManager.addListener({
event: cc.EventListener.CUSTOM,
eventName: cc.Director.EVENT_AFTER_DRAW ,
callback: function (event) {
var context = cc.game._renderContext;
var arrayBuffer = new Uint8Array(context.drawingBufferWidth * context.drawingBufferHeight * 4);
context.readPixels(0, 0, context.drawingBufferWidth, context.drawingBufferHeight, context.RGBA, context.UNSIGNED_BYTE, arrayBuffer);
var clampArray = new Uint8ClampedArray(arrayBuffer, 0, arrayBuffer.length);
var imageData = new ImageData(clampArray, context.drawingBufferWidth, context.drawingBufferHeight);
var tempCanvas = document.createElement('canvas');
tempCanvas.getContext('2d').putImageData(imageData, 0, 0);
tempCanvas.toDataURL()
}
}, this.getRootNode());
注意一定要在cc.Director.EVENT_AFTER_DRAW这个事件触发时读取像素数据。