CanvasPixelArray
取得した viaをワーカー スクリプトに送信getImageData
し、ワーカー スクリプトがバックグラウンド スレッドでピクセルを操作できるようにし、最終的に操作されたピクセル配列を送り返すことができます。
ただし、ネイティブのキャンバス描画関数を使用していますdrawImage
。drawImage
呼び出しは現在 UI スレッドをブロックしています。これにより、ボタンの再描画が遅くなり、ボタンをクリックしたときに顕著な遅延が発生します。いくつかの欠点を挙げると. ctx.imageSmoothingEnabled = false
(編集:少なくともwebkit
プレフィックス付きの WebKit では、小さな改善が実現できるようになりました。)
Web ワーカーを使用して、描画をメイン スレッドからバックグラウンド スレッドに移動したいと考えています。ただし、キャンバスもコンテキストもワーカーに送信できないようです。
私はMDN でこの通知を見つけました:
注: いつものように、ワーカーを含むバックグラウンド スレッドは DOM を操作できません。バックグラウンド スレッドによって実行されるアクションによって DOM が変更される必要がある場合は、作成者にメッセージをポストしてその作業を行う必要があります。
しかし、DOM はそのままにしておきたいと思います。キャンバス要素に物を描きたいだけです。これは可能ですか、それとも Web ワーカーは実際に計算のみが許可され、描画は許可されていませんか?
(または、キャンバスに描画drawImage
する代わりに、を操作するような関数を使用することはおそらく可能ですか?)CanvasPixelArray