- PR -

GDI+線形グラデーション(LinearGradientBrush)

1
投稿者投稿内容
未記入
会議室デビュー日: 2005/06/20
投稿数: 1
投稿日時: 2005-06-20 16:36
GDI+Graphicsの線形グラデーション(LinearGradientBrush)についての質問です。

GDI+Graphicsで図形の塗りつぶし模様を指定するのに、
System.Drawing.Brushを指定します。
線形グラデーションは
System.Drawing.Drawing2D.LinearGradientBrushで指定できます。
このオブジェクトには中間補間色の列(ColorBlend)を指定できる
InterpolationColorsプロパティがあります。
例えば
   ………
   LinearGradientBrush lb = new LinearGradientBrush(new Rectangle(0,0,200,150),Color.Blue,Color.Green,0f);
   ColorBlend cb = new ColorBlend();
   cb.Colors = new Color[]{Color.Green,Color.Yellow,Color.Orange,Color.Red};
   cb.Positions = new float[]{0f,0.33f,0.67f,1f};
   lb.InterpolationColors = cb;
   g.FillRectangle(lb,0,0,200,150);
   ………
で期待通りの図形が描画できますが、
”設定されていない場合”に参照しようとしただけでも
実行時例外System.ArgumentExceptionが起きてしまいます。

例えば上のコードでLinearGradientBrush lb = new ...の直後の行で
ColorBlend cb0 = lb.InterpolationColors;
等とするとSystem.ArgumentExceptionがおきます。
これではInterpolationColorsが設定されているかいないかが、
ArgumentExceptionをcatchしないと判断できません。

変数lbをウォッチ式で見るとbool interpolationColorsWasSetという
フィールドがあるのですがpublicではないようで外から使えません。
そもそもウォッチでもInterpolationColorsはSystem.ArgumentExceptionになっています。
(他のプロパティにはExceptionはでていません。)

外部のプログラムで作成されたLinearGradientBrushを受け取った
プログラムでInterpolationColorsが設定されているか否かを判断する
適切な方法(try..catchは使わない方法)はありませんでしょうか。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-06-21 21:06
 MSDNによると、InterpolationColorsが設定されると、その他の設定が無効になるようです。
 このプロパティが設定されているインスタンスと、設定されていないインスタンスで、その他のプロパティに違いはありませんか?その他のプロパティから、InterpolationColorsプロパティが設定されているかどうかを知ることはできないでしょうか?

_________________
1

スキルアップ/キャリアアップ(JOB@IT)