9

ブレンディング モードを使用しているときに、アンチエイリアス処理された 2 つの線を結合すると問題が発生します。ブレンド モードとは、線の色と背景の色の比率を計算してアンチエイリアス処理された線を描画することを意味します。たとえば、ピクセルの比率が 70% の場合、新しいピクセルは 0.7*線の色 + 0.3*背景色になります。私の線のアンチエイリアシング関数は、基本的にエラー関数から作成されています (ただし、ほとんどのアンチエイリアシング関数で同じ問題が発生すると思います)。

0.5+0.5erf(-x)

そのため、2 本の線が交わると、一方が他方の線に引き寄せられ、落ち込みが生じます。2 本の線の接合部は本来あるべき強度の 75% まで落ち込みます。次に、0% を残す必要があるときに 2 番目の線が描画された後、これらの 50% の 50% が残りました。

1 - (0.5erfc(-x) * 0.5erfc(x))

結合された線でアンチエイリアス処理されたラスター グラフィックスを描画する際によくある問題だとしか思えないので、共通の解決策が必要ですが、これが何であるかはわかりません。ありがとう!

また、線の描画方法を明確にするために、線の幅はガウス関数 (e^-x*x) で作成され、両端はエラー関数を使用して丸められます。WolframAlpha で '0.5erfc(-x-5) * 0.5erfc(x-5) * e^(-y*y)' と入力すると、10 ピクセルの長さの水平線がどのように見えるかの例を見ることができます。

4

4 に答える 4

1

ブレンドされたセグメントで構成された見栄えの良い連続線を作成することは、一般に、それらをセグメントと考えると不可能です.1つの線があり、次のセグメントを同じ角度で描画し、次に90度の角度で。1 つの線のピクセルの色は、次の線と結合する角度によって異なります

次に考える必要があるのは、角度の付いた端を持つセグメントです。

それを描くには、ベベル ラインジョインの留め継ぎに関する文献を探してください (留め継ぎの方がおそらく簡単です)。

于 2012-12-25T23:04:33.823 に答える
0

最終的に、私はその問題に対する答えを見つけました。メイン画像に直接線を次々と直接描画することでそれを行う賢明な方法はありません.線をブレンドしたくないので、それらを一緒に追加してから、その線の合計の結果を得たいからです.メイン画像に溶け込みました。

ただし、これらすべての行を別のバッファーに描画し、そのバッファー全体をメインバッファーにブレンドする必要がある場合、これは扱いにくく、この質問をする前に不適切であると考えて却下しました。ありがたいことに、それ以来、私はアプローチを完全に変更しました。要素を次から次へと描画するための1つのバッファを持つ代わりに、描画する要素のリストを通過することによって各ピクセルが直接計算されるピクセルごとのアプローチを使用します。並列化 (OpenCL を使用)。したがって、追加のバッファーを使用する代わりに、いくつかの余分なピクセル値を保持できる小さな配列が必要です。描画する要素のリストには、ブラケットとして機能する要素があります。たとえば、次のようにします。

image => (blend) line1 => (blend) line2 => (blend) line3

私は持てます:

image => (blend) [0 => (add) line1 => (add) line2 => (add) line3]

これは、単一のピクセル値の使用をブラケットの各深度レベルの値の配列に置き換えることによって行われるため、この場合はv[0]からピクセルを取得しimage、次に 0 から開始してv[1]各行を に追加しますそれ、そしてすべての行が追加されると、ブラケットの閉鎖v[1]がブレンドされv[0]、正しい結果のピクセル値がそこにあるでしょう。

それだけです。非常に単純です。Photoshop でレイヤーのグループに相当するものを使用することを許可しない場合にのみ問題になります。

于 2016-05-21T13:09:32.790 に答える
0

ブレンドで隣接する線を描く場合、これはかなり不可能な問題です。

これについて考える良い方法は、理想的な形状への距離関数です。ピクセル強度は、(何らかの関数を介して) 形状までの距離にマップされます。最小限の2つの完璧なラインで。

残念ながら、これは、ピクセルに影響を与える可能性のあるすべての線までの距離が必要であることを意味します。これは、一部のテキスト ラスタライザーが行うことです。

または、線に重みを付けないでください。ピクセルごとにオンまたはオフになります。あとはスーパー サンプリングに任せます。これは、flash や svg などのソフトウェア ベクター レンダラーが行うことです。

于 2013-02-04T08:01:58.000 に答える