tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルCenterColor を指定しない PathGradientBrush
記事No5908
投稿日: 2007/07/24(Tue) 18:37
投稿者たいち
四角形内領域をPathGradientBrushで塗りつぶすとき、CenterColor を指定しない、
つまり Rectangle の四辺のみを指定した描画をする方法は無いでしょうか?

CenterPoint に四角形四辺のうちの一辺の座標指定して、指定した1辺と
同じ色を CenterColor に指定してもCenterPointから他辺に色のピークが
出て望むようなグラデーションが描画できません。

また、CenterColor を無指定にすると Color.White で描画されるようで、
これもまたうまくいきません。

何か良い方法はないでしょうか?アドバイスなりいただけると幸いです。

[ツリー表示へ]
タイトルRe: CenterColor を指定しない PathGradientBrush
記事No5915
投稿日: 2007/07/25(Wed) 11:14
投稿者花ちゃん
回答ではありません。
レスが無いのは、一体何をしたいのか解らないからではないでしょうか?

> 四角形内領域をPathGradientBrushで塗りつぶすとき、CenterColor を指定しない、
> つまり Rectangle の四辺のみを指定した描画をする方法は無いでしょうか?

単なる四角形の内部を塗潰すだけですか?


> CenterPoint に四角形四辺のうちの一辺の座標指定して、指定した1辺と
> 同じ色を CenterColor に指定してもCenterPointから他辺に色のピークが
> 出て望むようなグラデーションが描画できません。

これは、別の質問ですか?
うまく行かないコードを投稿するとか。

> また、CenterColor を無指定にすると Color.White で描画されるようで、
> これもまたうまくいきません。

うまくいきませんでは、見ている人にはどううまくいかないのか?何をしたいのかが
伝わりません。 それと、 .NET のバージョンは?
(問いただしてまで、回答する気になれないのでは)


  下図の長方形の図(線形グラデーションの作成)が描画したいのでしょうか?
  http://hanatyan.sakura.ne.jp/samplepic/vb8_228.htm

[ツリー表示へ]
タイトルRe^2: CenterColor を指定しない PathGradientBrush
記事No5920
投稿日: 2007/07/25(Wed) 18:29
投稿者たいち
> レスが無いのは、一体何をしたいのか解らないからではないでしょうか?

失礼しました。もう少し詳細に記述したいと思います。

四角形の内部の各頂点に別々の色を指定しそれらが反映されるグラデーションを描画する場合に、PathGradientBrushが使えますよね。

四角形の内部をPathGradientBrushでグラデーションを描画する場合、通常、四角形の頂点(以下点1〜点4と呼ぶ)とPathの中心位置(以下点5と呼ぶ)の合計5箇所の色を指定します。
※前回の投稿では頂点を辺と記述していました。辺は間違いで頂点が正です。

コードで表現すると例えば以下のようになります
(VisualBASIC 2005 Express/.Net 2.0環境でPictureBoxのPaintハンドラに実装)
-------------------------------------
Dim g As Graphics = e.Graphics
Dim gPath As New GraphicsPath
gPath.AddRectangle(g.VisibleClipBounds)
Dim gBrush As New PathGradientBrush(gPath)
gBrush.SurroundColors =
                 New Color() {Color.Yellow, Color.Green, Color.Blue, Color.Red}
gBrush.CenterColor = Color.Yellow
g.FillRectangle(gBrush, g.VisibleClipBounds)
-------------------------------------
(一部コードを割愛しています)

このとき、中心の点5から四角形の各頂点(点1〜点4)を結ぶ最短距離の線上付近に描画される色がグラデーション上濃い色が選択されるようで、太い線が描画されているように見えます。(ちょうど太陽などを撮影したときに現れるX字状の効果のように見えます)
※前回の投稿ではこれを「ピーク」と勝手に呼びました

これが出ないような描画方法は無いものでしょうか?というのが質問の趣旨です。
当方のやりたいこととしては四角形の4頂点のみ別々色を指定したグラデーションの描画であって、中心位置の色を指定しないと言うことができないかと考えています。

で、補足事項として、この「太い線に見えるもの」が描画されないような回避方法として、中心位置に四角形の1頂点の座標を指定しても、中心位置の色を無設定にしても効果がなかったということを質問の後半に記載したつもりでした。

四角形4頂点の色を別々に指定したいので、LinearGradientBrushでは要求を満たせないと思っています。

既存の関数もしくは上記が実現できるアルゴリズムなどの情報があれば是非ご教示いただきたく思います。

よろしくお願いします

[ツリー表示へ]