egret-docs-master/Engine2D/bitmapTexture/screenshots/README.md

91 lines
3.1 KiB
Markdown
Raw Permalink Normal View History

2024-06-19 13:32:32 +08:00
## 1.动态纹理类`egret.RenderTexture`
egret 中位图的显示基于纹理,通常静态纹理的获取方式有下面四种:
* 从已经创建出来的Bitmap中直接取 texture 属性。
* 通过 `RES.getRes("run_down_png");`如果有使用Res模块直接获取
* 通过URLLoader加载后获取
* 通过 ImageLoader 加载的,将获取的 data 赋值给 Texture 对象的 bitmapData.
除此之外egret 提供了动态纹理类`egret.RenderTexture`,用来将显示对象及其子对象绘制成为一个纹理,以实现截图功能。
```javascript
var 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下是可以保存路径的。图片会保存在游戏的私有空间路径中不能有 "../"。
这里为了兼容所有的平台,建议大家不要使用路径。
#### 示例
保存截屏测试,代码如下:
```javascript
var texture:egret.Texture = RES.getRes("run_png");
texture.saveToFile("image/png", "a/down.png", new egret.Rectangle(20, 20, 100, 100));
```
下面给出使用`saveToFile()`后生成的视图。
原图
![](55cd9c0ddeeb5.png)
截取后图
![](55cd9c0e37c9a.png)
### 2.3.drawToTexture()
`egret.RenderTexture`中的`saveToFile()`方法,将指定显示对象绘制为一个纹理
需要注意的是,这个方法会把当前的纹理清除,如果想要保留之前的纹理,需要使用 2 个 `RenderTexture` 交替绘制。
交替使用 `RenderTexture` 示例代码:
```javascript
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` 对象保证上一次的纹理不被清空。