我需要在 js 中管理网络摄像头的像素。我需要 Uint8ClampedArray 格式的它们。 到目前为止我做到了
this.imageCapture.grabFrame()
.then(imageBitmap => {
this.context2d.drawImage(imageBitmap, 0, 0,imageBitmap.width, imageBitmap.height);
})
然后我得到像素
this.context2d.getImageData(0,0,this._videoCanvas.width,this._videoCanvas.height);
然后我格式化 imageData
我在想是否有办法在不使用 Canvas 的情况下从 ImageBitMap 获取数据?但到目前为止还没有找到任何解决方法。有人对这个愚蠢的问题有聪明的答案吗?
谢谢!
最佳答案
不,目前没有办法。
我们正在努力在 ImageBitmap 接口(interface)上添加新的 getImageData()
方法 specs issue但这仍然需要实现者的兴趣,需要有人编写规范,并且可能需要大量的讨论,因为其中的一切并不那么容易。
(ImageBitmaps 可以代表许多不同的源,这些源内部存储在不同的位置,并需要进行不同的读回权衡)。
所以目前唯一的解决方案确实是通过 Canvas 。
在不久的将来,可能比 ImageBitmap.getImageData
更接近,您将能够从 MediaStream 中提取 VideoFrame 并将其直接绘制到 Canvas 上,如this answer of mine所示,从而避免了 ImageBitmap 步骤,甚至读取每帧的 YUV 平面,如 this answer of mine 中所示。 .
关于canvas - 是否可以在没有 Canvas 的情况下从 ImageBitMap Web 对象获取像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68102995/