Как манипулировать данными пикселей контекста CSS PaintWorklet? - PullRequest
0 голосов
/ 16 декабря 2018

Контекст Canvas поддерживает createImageData и putImageData, однако контекст в методе paint рабочего процесса рисования, похоже, не поддерживает эти методы.Я знаю, что он не позволяет считывать данные пикселей из контекста, как это четко указано в этом документе :

Контекст рабочего листа рисования не на 100% совпадает с контекстом,На данный момент методы рендеринга текста отсутствуют, и по соображениям безопасности вы не можете читать пиксели назад с холста .

Я удивлен, что кажется, что невозможно написать пиксельна холст, а также.Я что-то упустил или что?

Вот кодекс , который я сделал, чтобы продемонстрировать проблему - когда я его запускаю, Chrome печатает Uncaught TypeError: ctx.createImageData is not a function в консоли.

1 Ответ

0 голосов
/ 16 декабря 2018

Текущие спецификации в PaintRenderingContext2D имеют следующее примечание:

Примечание: PaintRenderingContext2D реализует подмножество CanvasRenderingContext2D API.В частности, он не реализует API CanvasImageData , CanvasUserInterface , CanvasText или CanvasTextDrawingStyles .

Так что это не только метод getImageData , который не был реализован, но и весь CanvasImageData , который включает

  • createImageData
  • getImageData
  • putImageData

Это, вероятно, стоитотмечая, что интерфейс ImageData даже не реализован в API paintWorkletGlobalScope , как и в ImageBitmap, мы можем не даже сделать что-то вроде

const i_data = new ImageData(w, h);
// some pixel manips
createImageBitmap(i_data).then(img => {
  ctx.globalCompositeOperation = 'copy';
  ctx.drawImage(img,0,0);
});

дажехотя это был бы способ сделать то, что вы хотели, без проблем, вызванных getImageData ...

...