ラインをアンストロークする方法はありますか? 私のキャンバスには、不透明度 0.5、幅 20 ピクセルの線があるとしましょう。今、私はそれを長くしたいと思っています。つまり、古い線から別の線を引くということです。これを行うと、古い線と新しい線の間の一致点の透明度が低下します (現在は 2 つの線で構成されているため)。そのため、古い線のストロークを解除してから、新しい線をストロークしたいと考えています。
どうすればできますか?
ありがとう
clearRect()
それを行う唯一の方法です。これを回避する良い方法 (キャンバスに多数の要素が描画されている場合) は、絶対配置を使用して HTML で 2 つのキャンバスをオーバーレイし、1 つを「静的」描画用に使用し、最上層を計画する描画用に使用することです。クリア/再描画します。これにより、すべてのキャンバスを再び描画するための CPU 時間も節約されます。
もう1つの洗練されたオプションは、「globalCompositeOperation」を「xor」に設定し、線を再度ペイントすることです。これにより、削除されます。
キャンバスへの描画方法は API によって厳密に定義されていますが、ソフトウェアやハードウェアでの描画方法はブラウザー開発者次第です。ハードウェア アクセラレーションを使用しているブラウザもあれば、その上で動作しているブラウザもあります。(例: ソフトウェア レンダラー atm を使用)
コンピュータ グラフィックスでは、何かを描画するときにバッファーに描画します。また、lineTo を呼び出してストロークすると、バッファーが更新され、基になるピクセルにあったすべての情報が失われ (透明度を使用している場合は部分的に失われます)、元に戻すことによって元に戻す方法はありません (負荷を含む実装がない限り)。古い図面の、しかしそれは記憶にとって本当に重いでしょう)。
したがって、ストロークを元に戻すことができると、CPU/GPU 時間を大幅に節約できる可能性がありますが、メモリが大幅に増加します
最も簡単な方法は、キャンバス全体を( を使用してclearRect
)単純にクリアし、線全体をもう一度描画することだと思います