我正在尝试从getImageData()返回的ImageData中提取画布上像素的数据。

不管以下方法是否是一个好主意(我可以只转换整个缓冲区),我都想知道是否有可能/允许/建议仅转换该数据的一部分。

我尝试了以下


const cvs = document.getElementById("paint");
const ctx = cvs.getContext('2d');
const imageData = ctx.getImageData(0, 0, cvs.width, cvs.height);
const data = imageData.data;
data[0] = 0x11;
data[1] = 0x22;
data[2] = 0x33;
data[3] = 0x44;
console.log(new Uint32Array(data.slice(0, 4).buffer)[0].toString(16));

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>test</title>
  </head>
  <body>
  <canvas id="paint" width=500px height=500px />
  <script src="test.js"></script>
  </body>
</html>





但是我真的找不到关于是否允许这样做以及可能以哪种怪异方式破解的文档。 Java的类型转换行为在哪里记录?
这会创建副本吗?它会访问相同的内存吗?

抱歉,这是一个可怕的问题。我是Java语言的新手。

最佳答案

如果我正确理解MDN文档,这似乎很安全:data.slice()创建数组部分的临时副本,new Uint32Array(ArrayBuffer)为该临时副本的ArrayBuffer创建视图。由于此临时副本不在其他任何地方使用,因此不会发生数据冲突。

10-06 15:52
查看更多