2010-12-01 25 views
1

私はあらゆる場所を見て、すべてを探検して何か良いものを見つけることができませんでした。 私が必要とするのは、ボーダーとグラデーションの塗りつぶしがある、角が丸い(各コーナーごとに異なる)イメージ(図形)を描くことができるクラスです。角を丸くして境界線とグラデーションを塗りつぶした画像をCで塗ります。

私が見つけたすべての例には、欠陥品質(機能不足など)があります。

私はこれを画像を描画してユーザーに表示するashxとともに使用します。

ありがとうございます!

答えて

9

GraphicsPathでは、グラデーションブラシで塗りつぶす比較的自由なフォームシェイプを描画できます。次のコード例では、丸みのある2つのコーナーとグラデーションの塗りつぶしを持つ矩形を作成します。

GraphicsPath gp = new GraphicsPath(); 
    gp.AddLine(new Point(10, 10), new Point(75, 10)); 
    gp.AddArc(50, 10, 50, 50, 270, 90); 
    gp.AddLine(new Point(100, 35), new Point(100, 100)); 
    gp.AddArc(80, 90, 20, 20, 0, 90); 
    gp.AddLine(new Point(90, 110), new Point(10, 110)); 
    gp.AddLine(new Point(10, 110), new Point(10, 10)); 
    Bitmap bm = new Bitmap(110, 120); 
    LinearGradientBrush brush = new LinearGradientBrush(new Point(0, 0), new Point(100, 110), Color.Red, Color.Yellow); 
    using (Graphics g = Graphics.FromImage(bm)) 
    { 
     g.FillPath(brush, gp); 
     g.DrawPath(new Pen(Color.Black, 1), gp); 
     g.Save(); 
    } 
    bm.Save(@"c:\bitmap.bmp"); 

次の画像におけるこの結果:

alt text

0

グラフィックスオブジェクトを使って独自のメソッドを作成し、 "手動で"(コード付きで読む)イメージを作成する必要があると思います。最も簡単な方法は、単一のグラフィックスオブジェクトを作成し、サークルを追加し、次に画像の各象限に必要なエキストラを追加し、次にオブジェクトを4つに分割することです。または、すべてのものを1つのイメージとして返し、CSSスプライトを使用して右の座標に適切な位置にイメージを配置します(グラフィックスライブラリへの呼び出しを少なくし、ファイルを1つだけ返すので、サーバ)。

関連する問題