截屏功能
1.动态纹理类egret.RenderTexture
egret 中位图的显示基于纹理,通常静态纹理的获取方式有下面四种:
- 从已经创建出来的Bitmap中直接取 texture 属性。
- 通过
RES.getRes("run_down_png");
(如果有使用Res模块)直接获取 - 通过URLLoader加载后获取
- 通过 ImageLoader 加载的,将获取的 data 赋值给 Texture 对象的 bitmapData.
除此之外,egret 提供了动态纹理类egret.RenderTexture
,用来将显示对象及其子对象绘制成为一个纹理,以实现截图功能。
const renderTexture: egret.RenderTexture = new egret.RenderTexture();
renderTexture.drawToTexture(displayObject);
2.方法
2.1.toDataURL()
egret.RenderTexture
中的toDataURL()
方法,将纹理转换成以 "data:image/png;base64," 开头的base64数据。
用法为: texture.toDataURL("image/png", new egret.Rectangle(20, 20, 100, 100));
- 第一个参数是所需要转成的格式,目前只支持 “image/png” 和 “image/jpeg”。
- 第二个参数是截取的区域,默认为
texture
整个大小。
注意: 因为是对
texture
本身进行的截取转换,所以即便Bitmap
有缩放等变形操作,也不会影响texture
截取区域的大小。
2.2.saveToFile()
egret.RenderTexture
中的saveToFile()
方法,裁剪指定区域并保存成图片。
用法为:texture.saveToFile("image/png", "a/down.png", new egret.Rectangle(20, 20, 100, 100));
- 第一个参数是图片格式
- 第二个参数是保存的文件名称(路径).
- 第三个参数是截取的区域
注意: 浏览器只支持保存名称,所以像 "a/down.png" 这种写法,浏览器会自动将其改成"a-down.png"。图片会保存在浏览器下载的位置。
Native下是可以保存路径的。图片会保存在游戏的私有空间,路径中不能有 "../"。 这里为了兼容所有的平台,建议大家不要使用路径。
示例
保存截屏测试,代码如下:
const texture: egret.Texture = RES.getRes("run_png");
texture.saveToFile("image/png", "a/down.png", new egret.Rectangle(20, 20, 100, 100));
下面给出使用saveToFile()
后生成的视图。
原图
截取后图
2.3.drawToTexture()
egret.RenderTexture
中的saveToFile()
方法,将指定显示对象绘制为一个纹理
需要注意的是,这个方法会把当前的纹理清除,如果想要保留之前的纹理,需要使用 2 个 RenderTexture
交替绘制。
交替使用 RenderTexture
示例代码:
if (this.bmp.texture == this.renderTexture) {
this.renderTexture2.drawToTexture(this, new egret.Rectangle(0, 0, 1024, 768));
this.bmp.texture = this.renderTexture2;
}
else {
this.renderTexture.drawToTexture(this, new egret.Rectangle(0, 0, 1024, 768));
this.bmp.texture = this.renderTexture;
}
其中 this.bmp
是保存画板的位图对象,this.renderTexture
和 this.renderTexture2
是用来保存纹理的 RenderTexture
对象。
更新画板的纹理时使用与当前不同的 RenderTexture
对象保证上一次的纹理不被清空。