用官方的截图demo发现截出的png图丢失节点的透明度

2019/10/31补充:是cc v2.1.2版本

——————————————————————————————

这个问题如何解决呢?相关的代码如下

on_touch_end : function(t) {
this.init();
// create the capture
this.schedule(() => {
let picData = this.initImage();
//this.createCanvas(picData);
//this.label.string = ‘Showing the capture’
this.saveFile(picData);

    }, 0, 0);
	console.log(this.camera)
},

init () {
this.label.string = ‘’;
let texture = new cc.RenderTexture();
let gl = cc.game._renderContext;
texture.initWithSize(2000, 2000, gl.STENCIL_INDEX8);
//texture.initWithSize(cc.visibleRect.width, cc.visibleRect.height, gl.STENCIL_INDEX8);
//cc.visibleRect.width是最终屏幕显示区域的大小,假如改大也可显示更多内容
this.camera.targetTexture = texture;
this.texture = texture;
console.log(“1:”);
console.log(cc.visibleRect.width + “=====” + cc.visibleRect.height);
console.log(this.texture);

},

initImage () {
let data = this.texture.readPixels();
//this._width = this.texture.width;
// this._height = this.texture.height;

	this._width = this.texture.width;
    this._height = this.texture.height;
    let picData = this.filpYImage(data, this._width, this._height);
    return picData;
},

saveFile (picData) {
if (CC_JSB) { //CC_JSB这个是true
let filePath = jsb.fileUtils.getWritablePath() + ‘render_to_sprite_image.png’;

        let success = jsb.saveImageData(picData, this._width, this._height, filePath)
        if (success) {
            cc.log("save image data success, file: " + filePath);
        }
        else {
            cc.error("save image data failed!");
        }
    }
},

filpYImage (data, width, height) {
// create the data array
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 = srow * width * 4;
let reStart = row * width * 4;
// save the piexls data
for (let i = 0; i < rowBytes; i++) {
picData[reStart + i] = data[start + i];
}
}
return picData;
},

顶起 顶起

本来想尝试这个方法https://forum.cocos.com/t/creator/40750,却发现cc.RenderTexture.create的方法已经取消了,官方文件里也已经找不到这个方法,郁闷。

就没有办法了吗

继续顶起

这个问题看样子是暂时没人回答了,但是还是有些不甘心,从我开始接触CC一个多月以来,有在贵平台几次寻求疑问,得到的有效回答并不是很多,然而对于这个教程稀少、解决方案案例不完善的引擎很需要有个平台去提出问题、解决问题。之前顶贴有些愤然,因为没人回帖,我还是保有一点希望有人知道如何解决。

刚才突然之间,我想到,倘若没人知道如何解决,那么这样无意义的顶贴,不如把自己的试错过程给记录下来,好给后人一些线索,也给自己的学习过程一个记录,更希望有人能在这份诚意和提供的线索之中给我一些指引。

先来详细讲一下我遇到的情况吧:

需求,多个带渐变透明度的节点的截图,列如下图

这是我做的一个地图编辑器,手机上用,需要有个地图的导出功能,就是导出为可以传播的图片,然而现在的问题是用官方给的demo中的截图方法,截图出来的节点透明度发生问题。见下图:

之前以为是简单的丢失透明度的问题,后来发现并不是这样,因为我刚才试着在不同的软件中打开这张图发现效果竟然是不一样的。

比如,下图是在画图中的效果,透明渐变部分呈现是灰色,而上面那张图是直接用win10默认的查看图片工具打开的效果,边缘是白色。

而在photoshop中呢,是这样的,然而注意这里背景色是白色,而却自动填充为PS表示透明的黑白格子样式。

然后比较神奇的是,用win10资源管理右键里的“使用照片编辑”呢,是这样的:


竟然是几近完美的,没有出错,为啥是几近完美,因为边缘有一点点问题,但是基本可以忽略,然而这个只能在他的编辑器中显示没问题,用这个编辑器保存的副本依然是有问题的图片。但是希望能给引擎官方提供点线索吧。

很希望这个问题能早点被解决,鄙人用贵引擎做了一个app,给一个小众游戏的玩家做地图用,好方便玩家们规划自己游戏中的家,发布以来至今已收获500多的下载量(这个游戏工作日在线人数才500左右),很高兴有这么好的引擎给我们这种小白开发者也能开发出一个看起来还挺有样子的app,所以这里表示感谢,发布以来很多玩家希望加入截图的功能,然而当我好不容易解决外部存储的问题后,又卡在这个透明度的问题上,还请各位大大们帮忙解决,谢谢各位了。

假如这个帖子没有得到回复的话,我还会继续跟踪,并且把我自己的试错过程记录在这里,希望能给同样独自奋斗在开发战线上的战友们一些参考。

另外,预告一下,之前关于外部存储的问题,我已经某种意义上解决了,但是还没彻底搞清楚,而且似乎有些机型上并不是很成功,所以待些日子,给出详细的、傻瓜的解决方案,希望同样为此问题迷茫的同僚们不要气馁,再接再厉。

啧啧啧 ,这不是部落规划器么? 私聊 我把我做的源码给你

这个是windows版的,当初做这个地图编辑器纯粹为了练手。后来游戏不玩了练手练的差不多了就不弄了。

加我QQ吧 563172862,有好多问题得向前辈请教

我也遇到同样的问题,貌似保存成jpg就可以了,不要保存成png!!!