GDI+ - 次世代グラフィックス デバイス インターフェイス
すべてのグラフィカル ユーザー インターフェイス (GUI) アプリケーションは、読み取り可能なデータとして表現できるハードウェア デバイス (モニター、プリンター、スキャナー) と対話します。ただし、アプリケーションはデバイスと直接通信しないため、デバイスごとに異なるユーザー インターフェイス コードを記述する必要があります。この作業の重複を避けるために、アプリケーションとデバイスの間で 3 番目のコンポーネントを使用できます。このコンポーネントは、デバイスに送信されるデータと、デバイスからプログラムに送信されるデータを変換して転送します。そしてこのコンポーネントは GDI+ です。 GDI+ は、.NET Framework でグラフィックス デバイスと対話するための入り口です。 GDI+ は、Gdiplus.dll というクラス ライブラリにある C++ クラスのセットです。 Gdiplus.dll は、Windows XP および Windows Server 2003 オペレーティング システムの組み込みコンポーネントです。さて、ここでは学術的な話にはあまり時間を費やしません。GDI+ を使用して Web フォームに絵を描いてみましょう。
もちろん、このような画像は標準のものではありません。興味があれば試してみてください。
名前空間 Sky_MsdnDataGrid
{
システムを使用する;
System.Collections を使用します。
System.ComponentModel を使用します。
System.Data を使用します。
System.Drawing を使用します。
System.Drawing.Imaging を使用します。
System.Web を使用します。
System.Web.SessionState を使用します。
System.Web.UI を使用します。
System.Web.UI.WebControls を使用します。
System.Web.UI.HtmlControls を使用します。
/// <概要>
/// AspxChart の概要説明。
/// </概要>
パブリック クラス AspxChart : System.Web.UI.Page
{
プライベートビットマップビットマップ;
プライベートグラフィックスグラフィックス。
プライベート int[] arrValues;
プライベート文字列[] arrValueNames;
private void Page_Load(オブジェクト送信者、System.EventArgs e)
{
arrValues = 新しい int[6];
arrValueNames = 新しい文字列[6];
arrValues[0] = 100;
arrValues[1] = 135;
arrValues[2] = 115;
arrValues[3] = 125;
arrValues[4] = 75;
arrValues[5] = 120;
arrValueNames[0] = "1 月";
arrValueNames[1] = "2 月";
arrValueNames[2] = "3月";
arrValueNames[3] = "4 月";
arrValueNames[4] = "5月";
arrValueNames[5] = "6 月";
this.Init_Bitmap();
this.Draw_Rectangle();
this.Draw_Pie();
//描画された画像を現在のページ応答の出力ストリームに Gif 形式で保存します
bitmap.Save(this.Response.OutputStream,ImageFormat.Gif);
}
/// <概要>
/// 描画されるビットマップ上で初期アクションを実行します (キャンバスとして想像できます)
/// </概要>
private void Init_Bitmap()
{
ビットマップ = 新しいビットマップ(400,200);
グラフィックス = Graphics.FromImage(ビットマップ);
グラフィックス.Clear(Color.White);
graphics.DrawString("会社の売上高
}
#region Web フォーム設計ツールによって生成されたコード
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: これは、ASP.NET Web フォーム設計ツールに必要な呼び出しです。
//
InitializeComponent();
Base.OnInit(e);
}
/// <概要>
/// このメソッドは設計ツールのサポートに必要です - コード エディタを使用して変更しないでください
/// このメソッドの内容。
/// </概要>
private void InitializeComponent()
{
this.Load += 新しい System.EventHandler(this.Page_Load);
}
#エンドリージョン
/// <概要>
/// キャンバス上に長方形を描画します
/// </概要>
プライベート void Draw_Rectangle()
{
int i;
PointF シンボル脚 = 新しい PointF(335,20);
PointF descLeg = 新しい PointF(360,16);
for (i = 0; i < arrValueNames.Length; i++)
{
graphics.FillRectangle(new SolidBrush(GetColor(i)),symbolLeg.X,symbolLeg.Y,20,10);
graphics.DrawRectangle(Pens.Black,symbolLeg.X,symbolLeg.Y,20,10);
graphics.DrawString(arrValueNames[i].ToString(),new Font("New Detailed Body",8),Brushes.Black,descLeg);
シンボル脚.Y += 15;
descLeg.Y += 16;
}
for (i = 0; i < arrValues.Length; i++)
{
graphics.FillRectangle(new SolidBrush(GetColor(i)),(i*35) + 15,200 - arrValues[i],20,arrValues[i]);
graphics.DrawRectangle(Pens.Black,(i*35) + 15,200 - arrValues[i],20,arrValues[i]);
}
}
/// <概要>
/// キャンバス上に円の形を描画します
/// </概要>
プライベート void Draw_Pie()
{
int i;
// currentangle は現在の角度を表します totalangle は最大角度を表します totalvalues は最大売上を表します
float sglCurrentAngle = 0、sglTotalAngle = 0、sglTotalValues = 0;
// 最大売上を計算する
for (i = 0; i < arrValues.Length; i++)
sglTotalValues += arrValues[i];
for (i = 0; i < arrValues.Length; i++)
{
// 当月の角度値: 当月の売上 / 最大売上 * 360
sglCurrentAngle = arrValues[i] / sglTotalValues * 360;
graphics.FillPie(new SolidBrush(GetColor(i)),240,95,100,100,sglTotalAngle,sglCurrentAngle);
graphics.DrawPie(Pens.Black,240,95,100,100,sglTotalAngle,sglCurrentAngle);
sglTotalAngle += sglCurrentAngle;
}
}
#region ヘルパー関数
プライベートカラー GetColor(int itemIndex)
{
色 色;
スイッチ(アイテムインデックス)
{
ケース0:
color = Color.Blue;
壊す;
ケース1:
color = Color.Red;
壊す;
ケース 2:
color = Color.Yellow;
壊す;
ケース 3:
color = カラー.パープル;
壊す;
ケース4:
color = カラー.オレンジ;
壊す;
ケース5:
color = カラー.ブラウン;
壊す;
デフォルト:
color = Color.Blue;
壊す;
}
色を返す;
}
#エンドリージョン
}
}