问题描述
我正在尝试从基于 ImageData
的 Uint8ClampedArray
创建一个新的 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." );
}