收藏
回答

toTempFilePath 透明区域被填充成黑色?

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小游戏 Bug Canvas.toTempFilePath(Object object) 工具 7.0.6 2.8.2


  let canvas = document.createElement('canvas');

        canvas.width = width;

        canvas.height = height;

        let ctx = canvas.getContext('2d');


        let gpTexture = new cc.RenderTexture(); //绘制

        //@ts-ignore

        gpTexture.initWithSize(widthheightcc.game._renderContext.STENCIL_INDEX8);

        this.gpCamera.targetTexture = gpTexture;

        this.gpCamera.render(this.node);//相机绘制,将屏幕上的内容更新到renderTexture中

        let data = gpTexture.readPixels();//读取renderTexture中的数据

        // data = this.changeAlpha(data);


        let rowBytes = width * 4;

        for (let row = 0row < heightrow++) {

            let srow = height - 1 - row;

            let imageData = ctx.createImageData(width1);

            let start = srow * width * 4;

            for (let i = 0i < rowBytesi++) {

                imageData.data[i] = data[start + i];

            }

            ctx.putImageData(imageData0row);

        }

 

let _tempFilePath = await canvas.toTempFilePathSync(

                {

                    x: 0,

                    y: 0,

                    width: width,

                    height: height,

                    destWidth: 380,

                    destHeight: 380,

                    fileType: 'png',

                    quality: 1

                });


            wx.previewImage({

                urls: [_tempFilePath

            })


最后一次编辑于  09-16
回答关注问题邀请回答
收藏

1 个回答

  • 小游戏运营专员-宏
    小游戏运营专员-宏
    09-16

    您好,请问您的预期是什么,能否提供个可运行的代码片段,这边复现一下看看(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。

    09-16
    赞同
    回复 3
    • SolarFrank
      SolarFrank
      09-16

      const {ccclassproperty} = cc._decorator;


      @ccclass

      export default class TD extends cc.Component {


          @property(cc.Camera)

          spCcc.Camera = null as any;

          // onLoad () {}


          async jietu () {

              let width = this.node.width;

              let height = this.node.height;

              //截图的本质是创建一个canvas,然后通过canvas生成图片材质

              this.spC.node.x = 0;

              this.spC.node.y = 0;


              let canvas = document.createElement('canvas');

              canvas.width = width;

              canvas.height = height;

              let ctx = canvas.getContext('2d');


              let gpTexture = new cc.RenderTexture(); //绘制

              //@ts-ignore

              gpTexture.initWithSize(widthheightcc.game._renderContext.STENCIL_INDEX8);

              this.spC.targetTexture = gpTexture;

              this.spC.render(this.node);//相机绘制,将屏幕上的内容更新到renderTexture中

              let data = gpTexture.readPixels();//读取renderTexture中的数据


              let rowBytes = width * 4;

              for (let row = 0row < heightrow++) {

                  let srow = height - 1 - row;

                  let imageData = ctx.createImageData(width1);

                  let start = srow * width * 4;

                  for (let i = 0i < rowBytesi++) {

                      imageData.data[i] = data[start + i];

                  }

                  ctx.putImageData(imageData0row);

              }


              if (CC_WECHATGAME) {

                  //@ts-ignore

                  let _tempFilePath = await canvas.toTempFilePathSync(

                      {

                          x: 0,

                          y: 0,

                          width: width,

                          height: height,

                          destWidth: 380,

                          destHeight: 380,

                          fileType: 'png',

                          quality: 1

                      });


                  //显示图片

                  wx.previewImage({

                      urls: [_tempFilePath]

                  })

              }

          }


          // update (dt) {}

      }



      09-16
      回复
    • SolarFrank
      SolarFrank
      09-16

      我是要对某个节点截图 但是要截图的部分 透明区域应该是透明的才对 但是现在显示的图片 透明区域是黑色的


      09-16
      回复
    • SolarFrank
      SolarFrank
      09-17
      https://developers.weixin.qq.com/s/cMA2frms7jbS
      09-17
      回复