canvas - 是否可以在没有 Canvas 的情况下从 ImageBitMap Web 对象获取像素?

标签 canvas imagebitmap

我需要在 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/

相关文章:

javascript - 如何使用canvasJs绘制图表?

javascript - 我如何使用带有原始数据而不是图像的 createImageBitmap 作为输入

javascript - 绘制图像()不工作

javascript - 带有大图像的 Canvas drawImage

c# - WPF Canvas 在绘制很多时卡住

c# - WPF:动态连接 Canvas 上的矩形与之间的路径