GDI+ - 차세대 그래픽 장치 인터페이스
모든 그래픽 사용자 인터페이스(GUI) 응용 프로그램은 읽을 수 있는 데이터로 표시될 수 있는 하드웨어 장치(모니터, 프린터, 스캐너)와 상호 작용합니다. 그러나 애플리케이션은 장치와 직접 통신하지 않습니다. 그렇지 않으면 각 장치마다 다른 사용자 인터페이스 코드를 작성해야 합니다. 이러한 작업 중복을 피하기 위해 애플리케이션과 장치 사이에 세 번째 구성 요소를 사용할 수 있습니다. 이 구성 요소는 장치로 전송된 데이터와 장치에서 프로그램으로 전송한 데이터를 변환하고 전송합니다. 그리고 이 구성요소가 GDI+입니다. GDI+는 .NET Framework의 그래픽 장치와 상호 작용하기 위한 입구입니다. GDI+는 Gdiplus.dll이라는 클래스 라이브러리에 있는 C++ 클래스 집합입니다. Gdiplus.dll은 Windows XP 및 Windows Server 2003 운영 체제에 기본 제공되는 구성 요소입니다. 좋습니다. 여기서는 학술적인 내용에 대해 이야기하는 데 많은 시간을 낭비하지 않겠습니다. GDI+를 사용하여 Web Form에 그림을 그려 보겠습니다.
이런 사진을 본 적이 있을 것입니다. 물론 이 사진은 표준이 아닙니다. 관심이 있다면 시도해 볼 수 있습니다.
네임스페이스 Sky_MsdnDataGrid
{
시스템 사용;
System.Collections 사용;
System.ComponentModel 사용;
System.Data 사용;
System.드로잉 사용;
System.드로잉.이미징 사용;
System.Web 사용;
System.Web.SessionState 사용;
System.Web.UI 사용;
System.Web.UI.WebControls 사용;
System.Web.UI.HtmlControls 사용;
/// <요약>
/// AspxChart에 대한 요약 설명입니다.
/// </summary>
공개 클래스 AspxChart : System.Web.UI.Page
{
개인 비트맵 비트맵;
개인 그래픽 그래픽;
개인 int[] arrValues;
개인 문자열[] arrValueNames;
개인 무효 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);
}
/// <요약>
/// 그려질 비트맵에 대해 초기 작업 수행(캔버스로 상상 가능)
/// </summary>
개인 무효 Init_Bitmap()
{
비트맵 = 새로운 비트맵(400,200);
그래픽 = Graphics.FromImage(비트맵);
graphic.Clear(색상.흰색);
graphic.DrawString("회사 매출
}
#region 웹 양식 디자인 도구로 생성된 코드
보호된 void OnInit(EventArgs e) 재정의
{
//
// CODEGEN: ASP.NET Web Form 디자인 도구에 필요한 호출입니다.
//
초기화구성요소();
base.OnInit(e);
}
/// <요약>
/// 이 메서드는 디자인 도구 지원에 필요합니다. 코드 편집기를 사용하여 수정하지 마세요.
/// 이 메소드의 내용입니다.
/// </summary>
개인 무효 초기화 구성 요소()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
/// <요약>
/// 캔버스에 직사각형 그리기
/// </summary>
개인 무효 Draw_Rectangle()
{
나는 int;
PointF SymbolLeg = new PointF(335,20);
PointF descLeg = new PointF(360,16);
for (i = 0; i < arrValueNames.Length; i++)
{
graphic.FillRectangle(new SolidBrush(GetColor(i)),symbolLeg.X,symbolLeg.Y,20,10);
graphic.DrawRectangle(Pens.Black,symbolLeg.X,symbolLeg.Y,20,10);
graphic.DrawString(arrValueNames[i].ToString(),new Font("새 상세 본문",8),Brushes.Black,descLeg);
기호Leg.Y += 15;
descLeg.Y += 16;
}
for (i = 0; i < arrValues.Length; i++)
{
graphic.FillRectangle(new SolidBrush(GetColor(i)),(i*35) + 15,200 - arrValues[i],20,arrValues[i]);
graphic.DrawRectangle(Pens.Black,(i*35) + 15,200 - arrValues[i],20,arrValues[i]);
}
}
/// <요약>
/// 캔버스에 원형 모양 그리기
/// </summary>
개인 무효 Draw_Pie()
{
나는 int;
// 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;
graphic.FillPie(new SolidBrush(GetColor(i)),240,95,100,100,sglTotalAngle,sglCurrentAngle);
graphic.DrawPie(Pens.Black,240,95,100,100,sglTotalAngle,sglCurrentAngle);
sglTotalAngle += sglCurrentAngle;
}
}
#region 도우미 함수
개인 색상 GetColor(int itemIndex)
{
색상 색상;
스위치(itemIndex)
{
사례 0:
색상 = 색상.블루;
부서지다;
사례 1:
색상 = 색상.빨간색;
부서지다;
사례 2:
색상 = 색상.노란색;
부서지다;
사례 3:
색상 = 색상.보라색;
부서지다;
사례 4:
색상 = 색상.주황색;
부서지다;
사례 5:
색상 = 색상.브라운;
부서지다;
기본:
색상 = 색상.블루;
부서지다;
}
색상 반환;
}
#endregion
}
}