javascript - 'bitmaprenderer' 不是 Chrome 中离屏 Canvas 渲染上下文的有效值吗?

标签 javascript google-chrome canvas offscreen-canvas

在将位图图像绘制到离屏 Canvas 上时,Chrome 控制台向我抛出错误:

Failed to execute 'getContext' on 'OffscreenCanvas': The provided value 'bitmaprenderer' is not a valid enum value of type OffscreenRenderingContextType.

问题发生在工作线程和窗口上下文中:

var img = new Image(63, 177);
img.src = "https://cdn.sstatic.net/Img/unified/sprites.svg";
img.onload = _ => {
	createImageBitmap(img).then(bitmap => {
		var canvas = new OffscreenCanvas(bitmap.width, bitmap.height);
		canvas.getContext('bitmaprenderer');
	}).catch(e => console.error(e.message));
};

我可以在使用(屏幕上) Canvas 界面时在窗口上下文中获取此 Canvas 上下文类型,如下所示:

document.createElement('canvas').getContext('bitmaprenderer');

worker 中需要 Canvas 上下文,因此我无法使用(屏幕上) Canvas 界面,毕竟没有文档访问权限。

虽然我可以通过在 getContext 方法中使用“2d”标识符来获取位图图像的二维渲染上下文,但它将是 OffscreenCanvasRenderingContext2D 而不是 ImageBitmapRenderingContext 。我不知道这两个接口(interface)的延迟差异,但据我了解,位图可以立即传输到 Canvas 上,而 2d 上下文应该被绘制。

我的 Chrome 版本是 74.0.3729.169,linked article浏览器兼容性表规定,从66版本开始提供位图渲染上下文接口(interface)。

我是否做错了什么,或者到目前为止,bitmaprenderer 不支持作为离屏 Canvas 渲染上下文的有效值?如何在 Chrome 中访问离屏 Canvas 的位图渲染上下文?提前致谢。

最佳答案

是的,当时提出这个问题ImageBitmapRenderingContext仍然无法从 OffscreenCanvas 获得,现在可以了 Chrome has a bug这会阻止它渲染到占位符 Canvas 。

请注意,如果您想使用此位图渲染器来将其绘制到另一个上下文,那么您可以直接将 ImageBitmap 传递给 2D drawImagewebgl texImage2d .

另请注意,在您的情况下,由于您位于主线程而不是 Worker 中,因此您绝对不需要 OffscreenCanvas 并且可以这样做

var img = new Image();
img.crossOrigin = 'anonymous';
img.src = "https://upload.wikimedia.org/wikipedia/commons/a/a4/Fiore_con_petali_arancioni_SVG.svg";
img.onload = _ => {
  createImageBitmap(img)
    .then(bitmap => {
      const canvas = Object.assign(document.createElement('canvas'), {
        width: bitmap.width,
        height: bitmap.height
      });
      const ctx = canvas.getContext('bitmaprenderer');
      ctx.transferFromImageBitmap(bitmap);
      return new Promise((res, rej) => {
        canvas.toBlob(blob => {
          if (!blob) rej('error');
          res(blob);
        });
      });
    })
    .then(blob => {
      console.log(blob);
      result.src = URL.createObjectURL(blob);
    })
    .catch(e => console.error(e.message));
};
PNG: <img id="result">

关于javascript - 'bitmaprenderer' 不是 Chrome 中离屏 Canvas 渲染上下文的有效值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56367196/

相关文章:

javascript - 事件和光标位置

javascript - 浏览器如何异步上传多个文件部分

JavaScript 事件监听器内存泄漏

javascript - 试图在 Canvas 中填充两种不同的颜色 fill()

javascript - Canvas drawImage 第一次使用另一个 Canvas 作为源参数时变慢

javascript - 使用 Imagemagick 进行转换而不保存文件(在 Heroku 上)

javascript - 在 Chart.js 中将标签颜色更改为特定值

javascript - 旋转或移动对象后如何更新顶点几何

html - 目前有没有办法在 WebKit 中的 <head> 之外使用 HTML5 &lt;meta&gt; 标签?

javascript - 为什么我的某些 Angular 在更改时不正确?