是否可以直接将ImageBitmap从JS传输到WebAssembly而不将其转换为类型化数组?ImageBitmap是否是JS和WebAssembly之间的某种“可转让”对象,就像它在主线程和worker之间一样?
这样做的目的是用更快的方法取代CanvasRenderingContext2D.getImageData()。目前,我这样做是为了在视频上应用过滤器:
我想尝试用下一个(如果可能的话)替换这个:
我不熟悉WebAssembly的可能性,所以可能对这个愚蠢的问题感到遗憾。
谢谢。
发布于 2022-09-03 03:36:31
我也不太熟悉WebAssembly方面的力量,但我真的不认为有任何方式消费一个ImageBitmap对象。
但是无论如何,从ImageBitmap对象读取像素数据的缓慢之处在于从GPU到CPU的读回操作。WebAssembly在这里帮不上什么忙。
您可能想看看WebGL,而IIRC有路径来呈现,然后在中间使用最少的操作进行读回,这可能比2D上下文要快一些。另一个需要查看的地方是传入的WebGPU上下文,它的支持相对较少。再次,我不是很熟悉它,但它绝对值得一看,如果你希望最好的香水。
但是,在您的情况下,最好是在生成ImageBitmap对象之前返回一步。你没有说它从哪里来,但是可以肯定的是,用来生成它的源已经可以访问它的像素数据了,也许比按位图更快。例如,如果您有一个图像文件的Blob表示,您可以将它的内部ArrayBuffer数据传递给您的WebAssembly并在那里进行解码。如果你有一个视频,你可以使用WebCodecs API提取YUV飞机。等。
https://stackoverflow.com/questions/73583179
复制相似问题