请问官方大神,升级3.3后截屏的readPixels方法没了,怎么搞?

/*

 * 截图

 * @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);

    }

}

就差这一句,难不成要全部改方案?

image

3.4版本开放了此接口

好的 谢谢

saveImageData 这个接口好像也没了

嗯 谢谢这个方式在其他地方有看到,主要是理解起来有点晦涩,我这边暂时不急,就按引擎大佬说的等3.4吧。 只是不知道3.4这种不带小版本的会不会其他的地方不稳定。等等看吧。 先做其他的。

/**
* 读取渲染纹理像素信息
* @param texture
*/
public static readPixels(texture: cc.RenderTexture): Uint8Array {
var { width, height } = texture, arrayBuffer = new ArrayBuffer(width * height * 4), region = new cc.gfx.BufferTextureCopy();
// region.texOffset.x = region.texOffset.y = 0;
region.texExtent.width = width;
region.texExtent.height = height;
cc.director.root.device.copyFramebufferToBuffer(texture.window.framebuffer, arrayBuffer, [region]);
return new Uint8Array(arrayBuffer);
}