Hoi,
Ik wil in een WPF applicatie graag gebruik maken van een mooie gradient van donker grijs naar iets donkerder grijs. Daarvoor gebruik ik uiteraard een simpele LinearGradientBrush met twee GradientStops met offset 0 en 1:
Omdat de kleuren zo dicht bij elkaar liggen is er echter geen mooie gradient mogelijk (er zijn nou eenmaal niet genoeg kleuren die er tussen liggen), dus zijn er heel duidelijk 'banden' te zien in de gradient.
Ik lees overal dat je hier niets tegen kunt doen, maar daar ben ik het toch niet mee eens. Ten eerste bevatten deze banden om een of andere reden ook af en toe kleur en is de gradient niet geheel grijs. Als ik met Photoshop de gradient 'desaturate' (de kleur eruit halen), dan ziet het al een stukje beter uit.
De tweede stap die een enorme verbetering met zich meebrengt (vind ik dan) is om de gradient te 'ditheren'. Ik weet niet hoe ik dat vertaal, maar Photoshop heeft daar een optie voor bij het tekenen van gradients. Als ik die optie gebruik en in Photoshop een gradient teken van dezelfde kleuren, dan mengt hij de banden een beetje samen door een soort van ruis toe te voegen. Het effect is niet te zien tenzij je in gaat zoomen, en het resultaat is dus een veel meer vloeiend ogende gradient.
Zie hier een screenshot. Links is een screenshot van de gradient zoals WPF hem tekent. In het midden is dezelfde screenshot maar dan zonder kleuren (desaturated door Photoshop). Rechts ten slotte is een gradient in Photoshop getekend met dithering.

Hier is nog een ingezoomde versie waar het verschil in detail te zien is:
http://www.nickthissen.nl/Images/Temp/tmp5342.png
Mijn vraag is dan ook simpel... Is er enige manier waarop ik de gradient kan tekenen zoals Photoshop dat doet, dus met dithering? Ik zie hier geen optie voor in de LinearGradientBrush, maar het zou anders kunnen heten, ik heb geen idee...
Bedankt!
Ik wil in een WPF applicatie graag gebruik maken van een mooie gradient van donker grijs naar iets donkerder grijs. Daarvoor gebruik ik uiteraard een simpele LinearGradientBrush met twee GradientStops met offset 0 en 1:
code:
1
2
3
4
| <LinearGradientBrush x:Key="GrayGradient" StartPoint="0,0" EndPoint="0,1"> <GradientStop Offset="0" Color="#312f2e" /> <GradientStop Offset="1" Color="#171614" /> </LinearGradientBrush> |
Omdat de kleuren zo dicht bij elkaar liggen is er echter geen mooie gradient mogelijk (er zijn nou eenmaal niet genoeg kleuren die er tussen liggen), dus zijn er heel duidelijk 'banden' te zien in de gradient.
Ik lees overal dat je hier niets tegen kunt doen, maar daar ben ik het toch niet mee eens. Ten eerste bevatten deze banden om een of andere reden ook af en toe kleur en is de gradient niet geheel grijs. Als ik met Photoshop de gradient 'desaturate' (de kleur eruit halen), dan ziet het al een stukje beter uit.
De tweede stap die een enorme verbetering met zich meebrengt (vind ik dan) is om de gradient te 'ditheren'. Ik weet niet hoe ik dat vertaal, maar Photoshop heeft daar een optie voor bij het tekenen van gradients. Als ik die optie gebruik en in Photoshop een gradient teken van dezelfde kleuren, dan mengt hij de banden een beetje samen door een soort van ruis toe te voegen. Het effect is niet te zien tenzij je in gaat zoomen, en het resultaat is dus een veel meer vloeiend ogende gradient.
Zie hier een screenshot. Links is een screenshot van de gradient zoals WPF hem tekent. In het midden is dezelfde screenshot maar dan zonder kleuren (desaturated door Photoshop). Rechts ten slotte is een gradient in Photoshop getekend met dithering.

Hier is nog een ingezoomde versie waar het verschil in detail te zien is:
http://www.nickthissen.nl/Images/Temp/tmp5342.png
Mijn vraag is dan ook simpel... Is er enige manier waarop ik de gradient kan tekenen zoals Photoshop dat doet, dus met dithering? Ik zie hier geen optie voor in de LinearGradientBrush, maar het zou anders kunnen heten, ik heb geen idee...
Bedankt!