如何从ArrayBuffer的数据创建出Texture2D文件?

如题,我需要从ArrayBuffer的数据创建出Texture2D文件

2.x 还是 3.x 还有3.6以上的版本也不一样,这个改下官方连个文档都没有,靠自己看源码摸索

3.8的版本,我之前用白鹭的,实现龙骨的方式就是从CDN下载龙骨zip,从ZIP把龙骨的三个文件解析出来,其中图片就是从ArrayBuffer创建bitmmap的,难道cocoscreator没有这转换?

肯定有,看一下imgasste 类

有啊,但是你要看源码。

我之前这么写,但是用不了,没反应,一直没解决掉。

使用不了,也没有用呀

我的意思是cocos的方法,大概是这个方法,具体哪里错了,不太清楚 他几个版本实现都不一样

好吧,我再研究下吧,刚转cocoscretor很多不懂

    let buffer = Uint8Array.from([...]);
    let spriteFrame = new cc.SpriteFrame();
    let tex = new cc.Texture2D();
    // /包含 RGBA 四通道的 32 位整形像素格式:RGBA8888。 一字节8位
    tex.reset({ width: 1, height: 1, format: cc.Texture2D.PixelFormat.RGBA8888, mipmapLevel: 0 });
    tex.uploadData(buffer, 0, 0);
    // 更新 0 级 Mipmap。
    tex.updateImage();
    spriteFrame.texture = tex;

刚试了下,还是不能解决

  1. 从 ArrayBuffer 创建一个 Blob
  2. 用 createImageBitmap 方法得到一个 ImageBitmap
  3. 参考:

2.x
const buffer = new Uint8ClampedArray(arraybuffer);
const imageData = new ImageData(buffer,寛,高);
const texture = new cc.Texture2D();
texture._nativeAsset = imageData;

3.x
const newRenderTexutre = new RenderTexutre();
newRenderTexture.initialize({widht:寛,height:高});
const bufferViews: ArrayBufferView[] = [buffer]; //这里的buffer就是你的uint8Array
const bufferCopy = new gfx.BufferTextureCopy();
bufferCopy.texOffset.x = 0;
bufferCopy.texOffset.y = 0;
bufferCopy.texExtent.width = 寛;
bufferCopy.texExtent.height = 高;
let devTexture = newRenderTexture.getGFXTexture();
const device: gfx.Device = newRenderTexture._getGFXDevice(); device.copyBuffersToTexture(bufferViews, devTexture, [bufferCopy]);

1赞



3.8没有RenderTexutre :rofl:

请问下,ArrayBuffer怎么创建一个Blod?

把你的文件上传一份我试试,图片是不是加密压缩过的,arraybuffer是你完成解密解压缩后的缓冲吗?我项目里面也有加载二级制文件创建的纹理,用起来没问题

通过loadany 来加载资源,自定义加载和解析方式具体可以看看assetmanager文档或者源码

const tex = new Texture2D();
tex.reset(your args as ITexture2DCreateInfo);
tex.setFilters(your args as Filter)
tex.setWrapMode(your args as WrapMode, ... other args)
tex.uploadData(your arraybufferview data)

downloadDragonBone.zip (87.5 KB)
工程在这里,麻烦了