|
■No81145 (みくさわ さん) に返信 > Graphics.DrawLine(Pens.Red, Integer.MaxValue, 100, 1, 1)のコードを実行すると > オーバーフローエラーが発生します。
内部的には、gdiplus.dll の GdipDrawLineI API を呼び出しているだけなので、 GDI+ 側の制限ということになりますね。実行環境によっても左右されそうです。
> (Graphics.ClipBoundsが可能領域かと思いましたが、MSDNに"クリッピング領域が無限の場合、 > ClipBoundsプロパティは巨大な四角形の情報を返します"とあり、不安になって質問させて > もらいました。)
e.Graphics.Clip あるいは Graphics.SetClip に対して、無限な領域 ―――たとえば Region.MakeInfinite() なリージョン―――が指定されて いたとしても、ClipBounds は無限値ではなく、有限値を返すということですよね。
ClipBounds が返す「巨大な四角形」のサイズはまちまちなようで、 その時々で、たとえば以下のような範囲が返されてきました。 明確な上限値があるというわけではなさそうです。
{X=-4194304,Y=-4194304,Width=8388608,Height=8388608} {X=-4194292,Y=-4194336,Width=8388608,Height=8388608} {X=-4194292,Y=-4194329,Width=8388608,Height=8388608} {X=-4194292,Y=-4194326,Width=8388608,Height=8388608} {X=-4194292,Y=-4194319,Width=8388608,Height=8388608} {X=-4194292,Y=-4194281,Width=8388608,Height=8388608}
ちなみに上記のいずれでも、 Dim b = g.ClipBounds g.DrawLine(Pens.Red, b.Left, b.Top, b.Right, b.Bottom) はエラーになりませんでした。少なくとも当方環境では。
|