Silverlight グラデーション ブラシの「カラー バンド」の数を増やす方法を誰か教えてもらえますか?
質問は以下の回答としてマークされていますが、ユーザーが背景を動的に変更できるため、グラデーション ブラシの代わりにビットマップを使用することは実際には解決策ではありません。これは、全画面グラデーションが使用されている場合に最も顕著です。
Silverlight グラデーション ブラシの「カラー バンド」の数を増やす方法を誰か教えてもらえますか?
質問は以下の回答としてマークされていますが、ユーザーが背景を動的に変更できるため、グラデーション ブラシの代わりにビットマップを使用することは実際には解決策ではありません。これは、全画面グラデーションが使用されている場合に最も顕著です。
残念ながら、私はあなたに半分しか答えられません - なぜこれが起こるのか、そしてそれを避ける方法についての一般的な原則です. SL での実装に関しては、私はそこの専門家ではないので、いくつかの一般的なアイデアしか提供できません。
これらのバンドは、ディスプレイの限られた色深度に起因します。効果を減らすには、グラデーションに少しノイズを加える必要があります。最も簡単な方法は、グラデーションから浮動小数点数として色を計算し、重み付けされたランダムな方法で整数に丸めることです-次のように:
correct_value = linear_gradient(x,y) // e.g 25.3
whole_part = round_down(correct_value) // 25
frac_part = correct_value - whole_part // 0.3
color_used = whole_part
if (true_with_probability(frac_part)):
color_used = color_used + 1 // color_used == 25 with 70% chance
// 26 with 30% chance
以下は、この手法の使用例です (左側は単純に最も近い整数に丸めた結果、右側はノイズを使用して丸めた結果です)。
あなたの場合にそれを実装する方法について-Brush
ピクセルごとの計算を可能にするカスタムオブジェクトを作成する方法、または代わりに役立つシェーダー機能のいくつかの並べ替えがあると思います。それらが不可能な場合は、このロジックを使用してビットマップを生成し、そのビットマップをブラシとして使用することもできます (これはImageBrush
.
おそらく、Silverlight の知識が豊富な人が参加して、この場合に最適な実装を提供できるでしょう。