RenderTexture截图后与实际效果差别很大

主要是字体的效果区别?背景图颜色变得更深一点了?

字体效果区别最明显,颜色用的是#7B3113,字体用的是方正黑体简体。你这么一说,好像背景颜色确实深了一些。这个问题怎么解决呢??

能给个重现的例子吗?

HelloWorldScene.zip (1.6 MB)
运行后会导出一张test.png的图片

我在mac上测试的没问题,使用的是github最新代码

哦,RenderTexture::save()保存生成的图片确实有问题,在程序中渲染就没问题。

@zx504287 你之前的图片是jpg,没有alpha通道,现在保存为png的话,默认是有alpha通道的。你保存为jpg图片就没问题了。

可是有黑边……

我没发现黑边啊,你说的黑边指的是?

就是背景是黑色的……实际上需求要的是透明的

不过导出jpg的话,确实字体就没那个问题了,先暂时导出jpg的好了。

如果是这样的话,那么rendertexture应该创建和图片一样大小的图片,而不是整个窗口大小。

OK,我大概明白意思了,谢谢

渲染简单的是没问题的, 如果渲染多个堆叠的带半透明的图片 是会有问题的, 题主发的图, 文字都出现了毛边. 我这里cocos2d-js 3.15.1的版本, 很多问题.

重现步骤

  1. 创建一个renderTexture
  2. clear为完全透明
  3. 画一张背景图
  4. 在背景图上画几个label
  5. 把rt加到屏幕上

会发现label变得透明了, 可以透出后面的背景

上面是原始的
下面是renderTexture上的效果
把renderTexture的getSprite() 的blendFunc改成{src = gl.ONE, dst = gl.ZERO}, 字就没问题了, 但是png的透明部分会变成黑色.
望解决一下, 谢谢

对 大概就是这样, 不止文字,如果一张不透明的背景图A,上面有半透明的child图B,渲染A后,A上面B所在的位置也会变得半透明。@minggo 很久没上过论坛了, @wangzhe @leda @dumganhar

意思是我如果要缓存一个面板的话, 就一个个的去遍历所有子对象。然后设置
GL::blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE);
?????

这个问题怎么解决,我在做绘画功能,需要动态修改图片,然后保存图片,然后再使用。也发现这样有黑边、锯齿,怎么办?

这个可以解决渲染结果展示的灰边:

https://github.com/cocos2d/cocos2d-x/pull/19748

    // Texture2D 新增一个设置方法
    // 设置 rt 内部的 texture 为 true
    texture->setPremultipliedAlpha(true);

saveToFile 的解决目前可以参考:
https://github.com/cocos2d/cocos2d-x/issues/18980#issuecomment-410534926

    std::unique_ptr<cocos2d::Image> image(cocos2d::utils::captureNode(this));
    image->saveToFile(filePath);

这问题后来解决了吗?你是一个个遍历吗?