将 SharedArrayBuffer 转换为普通的 ArrayBuffer

问题描述

我正在尝试从基于 ImageDataUint8ClampedArray 创建一个新的 SharedArrayBuffer,因为 ImageData 构造函数不接受基于 Uint8ClampedArray SharedArrayBuffer 我必须以某种方式将其转换为普通的 ArrayBuffer

知道如何将 SharedArrayBuffer 转换为普通的 ArrayBuffer 或如何使用 ImageData 创建 SharedArrayBuffer 吗?

解决方法

您必须将该数据复制到上下文将完全拥有的自己的缓冲区中。

您只需在 SAB 的 Uint8ClampedArray 上调用 .slice() 即可:

if( window.SharedArrayBuffer ) {
  const buf = new SharedArrayBuffer( 50 * 50 * 4 );
  const arr = new Uint8ClampedArray( buf );
  const img = new ImageData( arr.slice(),50,50 );
  const { width,height } = img;
  console.log( { width,height,data: img.data.slice(0,20) } );
}
else {
  console.error( "Your browsers doesn't support SharedArrayBuffer in this context." );
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...