首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能直接将ImageBitmap从JS传输到WebAssembly,并在那里将其转换为ImageData?

是否有可能直接将ImageBitmap从JS传输到WebAssembly,并在那里将其转换为ImageData?
EN

Stack Overflow用户
提问于 2022-09-02 13:15:55
回答 1查看 161关注 0票数 0

是否可以直接将ImageBitmap从JS传输到WebAssembly而不将其转换为类型化数组?ImageBitmap是否是JS和WebAssembly之间的某种“可转让”对象,就像它在主线程和worker之间一样?

这样做的目的是用更快的方法取代CanvasRenderingContext2D.getImageData()。目前,我这样做是为了在视频上应用过滤器:

  1. context.drawImage(imageBitmap,0,0);
  2. 设imageData = context.getImageData();
  3. 通过imageData循环并应用色度键滤波器。

我想尝试用下一个(如果可能的话)替换这个:

  1. 将ImageBitmap转移到WebAssembly;
  2. 将ImageBitmap转换为ImageData;
  3. 通过ImageData循环并应用铬键过滤器;
  4. 传输将ImageData改为JS,并在画布上绘制它。

我不熟悉WebAssembly的可能性,所以可能对这个愚蠢的问题感到遗憾。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-09-03 03:36:31

我也不太熟悉WebAssembly方面的力量,但我真的不认为有任何方式消费一个ImageBitmap对象。

但是无论如何,从ImageBitmap对象读取像素数据的缓慢之处在于从GPU到CPU的读回操作。WebAssembly在这里帮不上什么忙。

您可能想看看WebGL,而IIRC有路径来呈现,然后在中间使用最少的操作进行读回,这可能比2D上下文要快一些。另一个需要查看的地方是传入的WebGPU上下文,它的支持相对较少。再次,我不是很熟悉它,但它绝对值得一看,如果你希望最好的香水。

但是,在您的情况下,最好是在生成ImageBitmap对象之前返回一步。你没有说它从哪里来,但是可以肯定的是,用来生成它的源已经可以访问它的像素数据了,也许比按位图更快。例如,如果您有一个图像文件的Blob表示,您可以将它的内部ArrayBuffer数据传递给您的WebAssembly并在那里进行解码。如果你有一个视频,你可以使用WebCodecs API提取YUV飞机。等。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73583179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档