Cocos2.X和3.X的截图功能

感觉会用到,先Mark一下

给我 /白嫖怪 :11:

web端就用不了jsb的保存了吧

嗯,jsb是原生环境才有的对象

mark一下

太棒了 比官方还靠谱

浏览器可行,但是android原生会在以下代码处进入死循环状态,感觉是没有找到方法,
cc.director.root.device.copyFramebufferToBuffer(texture.window.framebuffer, arrayBuffer, [region]);

使用的版本是creator3.3.2,有什么方法可破吗?

战略性mark~~~

啊,不好意思,才注意。。该方法不存在的话可能是device的问题,也可能是这个方法被删了:grinning:(3.4版本确实删了这个方法)
3.X改进版已更新,读取像素信息大概如下(cc.RenderTexture.prototype.readPixels在3.4又加回来了):

/**
* 读取渲染纹理像素信息
* @param texture
*/
public static readPixels(texture: cc.RenderTexture): Uint8Array {
// 通用版本
var { width, height } = texture, gfxTexture = texture.getGFXTexture(), gfxDevice = texture’_getGFXDevice’, bufferViews = [],
region = new cc.gfx.BufferTextureCopy, buffer = new Uint8Array(width * height * 4);
// region.texOffset.x = region.texOffset.y = 0;
region.texExtent.width = width;
region.texExtent.height = height;
bufferViews.push(buffer);
gfxDevice && gfxDevice.copyTextureToBuffers(gfxTexture, bufferViews, [region]);
return buffer;
// 3.4及以上版本
// return texture.readPixels();
}

jsb.fileUtils.writeDataToFile(data, filePath); 这个方法,存进Android后,打开这张图片什么都没有哦,这里确定没有问题吗?

嗯,这个方法本身没问题(生成文件),截图生成的RGBA像素信息也没问题(拷贝到web上是能正常显示的),那唯一有问题的就是RGBA数据不适合这个方法,试过使用fileUtils获取内部的图片返回的数据是ArrayBuffer,且不为widthheight4这样的长度,说明这中间两种数据格式需要经过一层转化(官方说3.5后支持);
这里有个官方的帖子有现有的处理方式 CococsCreator 3.x 技术方案分享

好东西,另外提示一下,3.x的截图,如果用到翻转函数filpYImage,一定要保证图片width和height是整数,view.getVisibleSize()会提供小数点精度的数据,注意防坑

正好需要,感谢大佬分享。

mark~~截图总结

你们3.x截图在win模拟器上会显示纯黑色么,,,我在web和android都是正常的,就win异常

Mask!

mark 下

mark 正好学习一下 :smiley:

texture.readPixels()这个方法截图是有问题的,之前按照官方例子来就遇到了,需要调整了

先mark后看