2010-02-02 3 views
3

Je voudrais recréer un dégradé conique/circulaire dans WPF. J'ai cherché à hériter System.Windows.Media.GradientBrush - dont on peut hériter - mais utilise beaucoup de plomberie interne pour faire le travail (hérité de System.Windows.Media.Brush)Comment implémenter un dégradé conique/cône/circulaire dans WPF

Toutes les idées sur comment y parvenir serait apprécié (de préférence sans avoir recours à des bitmaps)

Cheers.

Dan

a posé cette question à un certain temps en Juillet (Circular Gradient and WPF), mais je ne voulais pas de ressusciter une vieille question.

+1

Le problème avec cette question est qu'elle risque d'être fermée en tant que doublon. Malheureusement, en tant que nouvel utilisateur, vous n'avez pas accès aux outils nécessaires pour remonter la question initiale, donc je ne peux pas proposer de solution. – ChrisF

Répondre

5

Vous pouvez créer un effet personnalisé. Je vous recommande de télécharger Shazzam, vous aurez également besoin du SDK DirectX. Donnez à l'élément un dégradé horizontal puis appliquez l'effet pour le transformer en dégradé de cônes.

/// <class>AngleGradient</class> 
/// <description>Renders an angle gradient.</description> 
//----------------------------------------------------------------------------------------- 
// Shader constant register mappings (scalars - float, double, Point, Color, Point3D, etc.) 
//----------------------------------------------------------------------------------------- 
/// <summary>The centre of the gradient.</summary> 
/// <minValue>0</minValue> 
/// <maxValue>1</maxValue> 
/// <defaultValue>0.5,0.5</defaultValue> 
float2 Centre : register(C0); 

/// <summary>The start angle.</summary> 
/// <minValue>0</minValue> 
/// <maxValue>1</maxValue> 
/// <defaultValue>0</defaultValue> 
float Angle : register(C1); 

//-------------------------------------------------------------------------------------- 
// Sampler Inputs (Brushes, including ImplicitInput) 
//-------------------------------------------------------------------------------------- 

sampler1D implicitInputSampler : register(S0); 
static const float PI = 3.14159265f; 
//-------------------------------------------------------------------------------------- 
// Pixel Shader 
//-------------------------------------------------------------------------------------- 
float4 main(float2 uv : TEXCOORD) : COLOR 
{ 
    float angle = atan2(uv.y-Centre.y, uv.x-Centre.x)+PI; 
    angle = (angle/(2*PI)) + Angle; 
    return tex1D(implicitInputSampler,min(angle > 1 ? angle-1 : angle,0.99)); 
Questions connexes