/*
* 截图
* @param nodeParam 需要截取的节点
* @param orthoSize 正交投影的视窗尺寸
*/
public captureScreen(nodeParam: Node, orthoSize: number, callback: Function, fileName?: string) {
if (JSB) {
let width = Math.floor(nodeParam.getComponent(UITransform)?.contentSize?.width!);
let height = Math.floor(nodeParam.getComponent(UITransform)?.contentSize?.height!);
var imageMame = "result_share.jpg";
if(fileName){
imageMame = fileName;
}
let fullPath = jsb.fileUtils.getWritablePath() + imageMame;
if (jsb.fileUtils.isFileExist(fullPath)) {
jsb.fileUtils.removeFile(fullPath);
}
// 在主场景创建一个新的相机节点
let nodeCamera = new Node();
nodeCamera.parent = director.getScene() as any;
let camera = nodeCamera.addComponent(Camera);
// 创建纹理
let texture = new RenderTexture();
texture.resize(width, height);
camera.near = 0;
camera.projection = renderer.scene.CameraProjection.ORTHO; // 正交或透视模式
camera.targetTexture = texture;
var out = v3(0, 0, 0);
nodeParam.parent?.getWorldPosition(out);
camera.node.setPosition(out);
// 截图后默认倒置的图片回正
let data = texture.readPixels();
let picData = new Uint8Array(width * height * 4);
let rowBytes = width * 4;
for (let row = 0; row < height; row++) {
let srow = height - 1 - row;
let start = Math.floor(srow * width * 4);
let reStart = row * width * 4;
for (let i = 0; i < rowBytes; i++) {
picData[reStart + i] = data[start + i];
}
}
// 保存图片
(jsb as any)['saveImageData'](picData, width, height, fullPath);
nodeCamera?.parent?.removeChild(nodeCamera);
callback(fullPath);
}
}
就差这一句,难不成要全部改方案?
