Могу ли я преобразовать фрагмент массива в другой тип? - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь извлечь данные пикселя на холсте из ImageData, возвращенного getImageData ().

Независимо от того, является ли следующий подход хорошей идеей (я мог бы просто преобразовать весь буфер)Я хотел бы знать, возможно ли / разрешено / рекомендовано просто преобразовать часть этих данных.

Я попробовал следующее

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>

Но я не могу найти какую-либо документацию о том, разрешено ли это и что может сломаться каким странным образом.Где документировано поведение преобразования типов для Javascript?Будет ли это создать копию?Будет ли доступ к той же памяти?

Извините, если это ужасный вопрос.Я новичок в Javascript.

1 Ответ

0 голосов
/ 07 февраля 2019

Если я правильно понимаю документы MDN, это кажется безопасным: data.slice() создает временную копию части массива, new Uint32Array(ArrayBuffer) создает представление для ArrayBuffer этой временной копии.Поскольку эта временная копия больше нигде не используется, конфликт данных не может возникнуть.

...