Pergunta

Eu comecei a jogar com WPF e queria desenhar roda de cores em um formulário.

No começo eu tentei usar LinearGradientBrush em ArcSegment assim:

<Path StrokeThickness="35" Height="150" Width="150">
    <Path.Stroke>
        <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
            <GradientStop Color="Red" Offset="0.15" />
            <GradientStop Color="Orange" Offset="0.2" />
            <GradientStop Color="Yellow" Offset="0.35" />
            <GradientStop Color="Green" Offset="0.5" />
            <GradientStop Color="Blue" Offset="0.65" />
            <GradientStop Color="Indigo" Offset="0.75" />
            <GradientStop Color="Violet" Offset="0.9" />
        </LinearGradientBrush>
    </Path.Stroke>
    <Path.Data>
        <PathGeometry >
            <PathFigure IsClosed="True" StartPoint="25,70">
                <ArcSegment Point="25,71" IsLargeArc="True"
                    Size="50,50" SweepDirection="Clockwise" />
            </PathFigure>
        </PathGeometry>
    </Path.Data>
</Path>

Sem sucesso, porque gradiente ainda era horizontal.

Outra idéia é o que tenho a linha de dobra de alguma forma depois de aplicar o gradiente. Mas eu não posso encontrar apropriate transformar.

Se houver transformar nenhum padrão é possível fazer transformar personalizado? Ou devo chamar a roda de cores de pixels?

Todas as ideias, por favor.

Foi útil?

Solução

Esta biblioteca tem pixel shaders que atraem rodas de cor

XAML Amostra:

<Ellipse Width="300"
         Height="300"
         Fill="White">
    <Ellipse.Effect>
        <effects:HsvWheelEffect />
    </Ellipse.Effect>
</Ellipse>

Note que a elipse deve ter um conjunto escova no Fill Para que isso funcione, pode ser de qualquer cor.

Outras dicas

Aqui está mais um exemplo do Silverlight: http://asyrovprog.host22.com/colorwheel.html . O código fonte está localizado aqui:. timeline.codeplex.com sob licença BSD

O que você está procurando um caminho gradiente escova . Infelizmente, ainda não está disponível em WPF (mas é no GDI +). Talvez em uma versão futura ...

Eu tenho uma idéia sobre como obter uma roda de cor aproximada.

Uma descrição de alto nível de que seria utilizando gradientes lineares (rectângulos), que são rodados e traduzido para fazer um polígono regular, cuja espessura é muito mais larga do que a largura do anel desejado. Você, então, "cut out" uma forma de anel com isso e usá-lo como a sua roda de cores.

A roda de cores tem várias cores principais (vermelho, verde, azul, amarelo, etc). Primeiro você precisará definir a medição grau de alguma linha de base arbitrária. Por exemplo, o vermelho é em 0 radianos, azul está em radianos pi, etc Pode também definir um raio interior e exterior para o anel. Usando trig, você anda em torno do anel desenho retângulo com um gradiente linear da cor que você começar para a próxima cor adjacente. A largura do retângulo terá que ser maior do que a largura do anel (você verá porque mais tarde) e o retângulo terá de ser girada para ser tangente ao círculo em seu ponto médio.

Uma vez terminado, você terá um "polígono de cor" (um termo que eu acabei de inventar). Você, então, extrair uma forma de anel a partir deste polígono como um cortador de biscoitos faz com massa. Não seria mais do que uma maneira de fazer isso. Simplesmente desenhando um círculo preenchido a partir do centro para o raio interno com o fundo vai se livrar na parte do meio. A parte externa seria mais difícil. Eu não sei se você pode fazer isso em WPF, mas o que você precisa fazer é gerar uma máscara que é um círculo do centro para a borda externa do anel. Seria um círculo branco em um fundo preto. Você, então, "E" com a imagem para livrar-se do lado de fora do polígono.

Não é perfeito, mas ele vai olhar I razoável suspeito. Lotes de trig!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top