被几个概念绕晕了,怎么将Texture2D另存为一个文件?

被几个概念绕晕了,RenderTexture,Texture2D,Image,Sprite,SpriteFrame…
怎么将远程加载的Texture2D另存为一个文件?

Texture2D怎么转Image?

Image在creator里有吗?

载入到内存里的图片就是Texture2D

使用RenderTexture也不行,只支持RGBA,不支持JPG

目前只能使用 RenderTexture 保存内容,贴图本身无法被存储为文件,也没有转换为原生 Image 的公有方法。
RenderTexture 保存的像素格式应该跟你一开始设置的像素格式一致

2017-04-26T01:50:16.285Z - normal: Simulator: RGBA is not supported for JPG format.

2017-04-26T01:50:16.286Z - normal: Simulator: RGBA is not supported for JPG format.

2017-04-26T01:50:16.288Z - normal: Simulator: RGBA is not supported for JPG format.

2017-04-26T01:50:16.289Z - normal: Simulator: RGBA is not supported for JPG format.

2017-04-26T01:50:16.292Z - normal: Simulator: Assert failed: only RGBA8888 can be saved as image

cc.loader.load({url: loadpath, type: ‘jpg’}, function (err, tex) {

             if (err) {
                  cc.error(err);
             }
             else {
                 var spriteFrame = new cc.SpriteFrame(tex);
                 var renderTexture = cc.RenderTexture.create(tex.width, tex.height, cc.Texture2D.PIXEL_FORMAT_RGB888)//, gl.DEPTH24_STENCIL8_OES);
                 renderTexture.getSprite().setSpriteFrame(spriteFrame);
                 renderTexture.saveToFile(filepath);
                 callback(spriteFrame);
             }
         });

这是我的代码,这样不行。

1赞

if (!jsb.fileUtils.isDirectoryExist(dirpath)) {
jsb.fileUtils.createDirectory(dirpath);
}
var spriteFrame = new cc.SpriteFrame(tex);
var renderTexture = cc.RenderTexture.create(tex.width, tex.height, cc.Texture2D.PIXEL_FORMAT_RGBA8888)//, gl.DEPTH24_STENCIL8_OES);
renderTexture.getSprite().setSpriteFrame(spriteFrame);
renderTexture.saveToFile(filepath, cc.ImageFormat.JPG, false);
callback(spriteFrame);

这是我的代码