将SharedArrayBuffer转换为普通ArrayBuff



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

有什么想法吗?我如何将SharedArrayBuffer转换为普通的ArrayBuffer,或者我如何用SharedArrayBuffer创建ImageData

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

您只需在SAB:的Uint8ClampedArray上调用.slice()即可完成此操作

const sab = new SharedArrayBuffer( 50 * 50 * 4 );
const arr = new Uint8ClampedArray( sab );
const img = new ImageData( arr.slice(), 50, 50 );

或者,如果你要多次绘制这个SAB的内容,那么创建一个固定的ArrayBuffer,并用SAB的属性填充它:

const sab = new SharedArrayBuffer( 50 * 50 * 4 );
const sab_view = new Uint8ClampedArray( sab );
const ab = new ArrayBuffer(sab.byteLength);
const arr = new Uint8ClampedArray( ab );
const img = new ImageData( arr, 50, 50 );
// later when sab has new content being set
arr.set(sab_view, 0);

实时示例(来源(

(外包是因为SharedArray Buffer需要COOP,StackSnippet不会给我们…(。

相关内容

  • 没有找到相关文章

最新更新