WPFアプリケーションでカラーホイールを描く方法は?
-
05-07-2019 - |
質問
WPFで遊び始め、フォームにカラーホイールを描きたいと思いました。
最初に、ArcSegmentでLinearGradientBrushを次のように使用しようとしました。
<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>
勾配がまだ水平だったため、失敗しました。
別のアイデアは、グラデーションを適用した後、なんとか線を曲げなければならないことです。しかし、適切な変換が見つかりません。
標準のトランスフォームがない場合、カスタムトランスフォームを作成できますか?または、ピクセルごとにカラーホイールを描画する必要がありますか?
ご意見をお寄せください。
解決
このライブラリには、カラーホイールを描画するピクセルシェーダーがあります
サンプルxaml:
<Ellipse Width="300"
Height="300"
Fill="White">
<Ellipse.Effect>
<effects:HsvWheelEffect />
</Ellipse.Effect>
</Ellipse>
これを機能させるには、楕円の Fill
にブラシを設定する必要があります。任意の色にすることができます。
他のヒント
silverlightの別の例を次に示します。 http://asyrovprog.host22.com/colorwheel.html 。 ソースコードはここにあります:bsdライセンスの下のtimeline.codeplex.com。
探しているのはパスグラデーションブラシ。残念ながら、WPFではまだ利用できません(ただし、GDI +では利用できます)。おそらく将来のバージョンで...
おおよそのカラーホイールを取得する方法についてのアイデアがあります。
高レベルの説明は、回転および平行移動する線形グラデーション(長方形)を使用して、厚さが目的のリング幅よりもはるかに広い正多角形を作成することです。次に、「切り取り」ます。これからリング形状を作成し、カラーホイールとして使用します。
カラーホイールには、いくつかの主要な色(赤、緑、青、黄色など)があります。最初に、任意のベースラインから次数測定を定義する必要があります。たとえば、赤は0ラジアン、青はpiラジアンなどです。リングの内側と外側の半径も定義します。トリガーを使用して、開始色から次の隣接色までの線形グラデーションでリング描画四角形を歩きます。長方形の幅はリングの幅よりも大きくする必要があり(後で説明します)、長方形はその中心点で円に接するように回転する必要があります。
終了すると、「カラーポリゴン」が表示されます。 (私が作った用語)。次に、クッキーカッターが生地で行うように、このポリゴンからリング形状を抽出します。これを行う方法は複数あります。中心から背景を使用して内側の半径に塗りつぶされた円を描くだけで、中央部分が削除されます。外側の部分はもっと難しいでしょう。 WPFでこれを行うことができるかどうかはわかりませんが、行う必要があるのは、リングの中心から外縁までの円であるマスクを生成することです。黒い背景に白い円になります。次に、「AND」ポリゴンの外側を取り除くために画像でそれを。
完璧ではありませんが、合理的に見えるでしょう。たくさんのトリガー!