2

序章

私は現在、MugTugのSketchpadに似た小さな描画アプリケーションを開発しています。しかし、私がまだ回避できていないかなり厄介な問題が1つあります。

描画アルゴリズム

私の基本的な描画アルゴリズムは、MugTugで使用されているものと似ています。基本的には、ユーザーが描画しているときにdrawImageを使用して画像にスタンプを付けるだけです。深刻なハンディキャップが1つあります。アルゴリズムは低いアルファで失敗し始めます。

これは、MugTugのツールで、次の方法でブラシ設定を設定することで簡単に確認できます:直径-> 100、硬度-> 1、フロー-> 100、不透明度-> 2(1は小さすぎます!アプリのバグ?)。

2つの主要な問題があります:1。目に見えるバンディング。2.色の変化(これがどのように機能するかを確認するために、さまざまな色を試してみてください...)

質問

この問題は色の精度と関係がありますか?Canvas APIは、8ビットチャネル(つまり、0〜255)を使用して色を処理しているように見えます。この制限を回避する方法はありますか?可能であれば、代わりに純粋なフロートカラー(0.0-1.0)を使用したいと思います。

これに対処する方法についてのアイデアは大歓迎です。色が実際に8ビットチャネルに制限されている場合、私は運が悪いと思います...

4

2 に答える 2

2

この問題は完全に色の精度が原因のようです。ほとんどのCanvasAPI実装は8ビットRGBAチャネルを使用していると思います。不透明度が1%または2%の場合、画像に適用する色はごくわずかで、差は約2〜5レベルです。したがって、ブラシを何度も繰り返し適用した後でも、使用する色はすべて次のようになります。小さい数に量子化されます。

独自の浮動小数点キャンバスを作成し、変更するたびに通常のキャンバスにコピーすることができます。これにより、ほとんどの操作で問題が完全に目立たなくなります。独自の描画操作を実装する必要があり(を使用するだけであればそれほど悪くはありませんdrawImage)、キャンバスの操作よりも遅くなる可能性があります。

于 2011-01-24T14:43:25.553 に答える
1

MugTugのSketchpadでも同様の問題が発生しますか?オレンジ色の背景に4%のアルファブルーのブラシを使ってみましたが、バンディングなどがあります。あなたがコーディングするよりもうまくいくなら、あなたは何か間違ったことをしている。

私はいつもキャンバスが32ビットグラフィックス(カラー用に24 +アルファ用に8)で動作するのを見てきましたので、これが解決できるとは思えません。

于 2011-01-24T13:51:42.160 に答える