問題
不透明ジッターを使用してブラシ ツールを作成しようとしています (Photoshop のように)。具体的な問題は次のとおりです。
さまざまなレベルの不透明度を使用して、HTML キャンバスにストロークを描画します。不透明度の高いピクセルは、不透明度の低いピクセルに置き換わる必要があります。それ以外の場合、ピクセルは変更されません。
その過程で透明性が失われてはなりません。ストロークは別のキャンバスに描画され、後で背景のキャンバスと結合されます。
結果は次のようになります。すべてのコードと対応する出力は、こちら(JSFiddle) にあります。
異なるレベルの不透明度で 1 つのパスをストロークすることはできないため (間違っている場合は訂正してください)、私のコードではセグメントごとに異なる不透明度のパスを作成します。
非解決策 1、「暗い」ブレンド モードの使用
暗いブレンド モードでは、不透明なピクセルを使用すると望ましい結果が得られますが、透明度では機能しないようです。透明性を失うことは取引の破綻です。
不透明なピクセルの場合:
透明ピクセルの場合:
非解決策 2、'destination-out' 合成演算子を使用する
新しいストローク セグメントを描画する前に、'destination-out' 合成演算子を使用して、下にあるピクセルからその不透明度を減算します。次に、「source-over」で新しいストローク セグメントを追加します。これはほとんど機能しますが、少しずれています。
解決策を探しています
各ピクセルを手動で操作することは避けたいです (過去に行ったことがあります)。明らかな何かが欠けていますか?この問題の簡単な解決策はありますか?
"Links to jsfiddle.net must be accompanied by code."