GDI+ — интерфейс графических устройств нового поколения.
Все приложения графического пользовательского интерфейса (GUI) взаимодействуют с аппаратными устройствами (мониторами, принтерами, сканерами), которые могут быть представлены в виде читаемых данных. Однако приложение не взаимодействует напрямую с устройством, в противном случае для каждого устройства придется писать отдельный код пользовательского интерфейса. Чтобы избежать дублирования работы, мы можем использовать третий компонент между приложением и устройством. Этот компонент будет конвертировать и передавать данные, отправленные на устройство, и данные, отправленные устройством, в программу. И этот компонент — GDI+. GDI+ — это способ взаимодействия с графическими устройствами в .NET Framework. GDI+ — это набор классов C++, расположенных в библиотеке классов Gdiplus.dll. Gdiplus.dll — это встроенный компонент операционных систем Windows XP и Windows Server 2003. Хорошо, я не буду тратить много времени на академические темы. Давайте воспользуемся GDI+, чтобы нарисовать картинку в веб-форме.
Вы наверняка видели подобные картинки. Конечно, эта картинка нестандартная. Код размещен здесь. Если вам интересно, вы можете попробовать!
пространство имен 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;
частная пустота 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] = "Январь";
arrValueNames[1] = "Февраль";
arrValueNames[2] = "Март";
arrValueNames[3] = "Апрель";
arrValueNames[4] = "Май";
arrValueNames[5] = "Июнь";
это.Init_Bitmap();
this.Draw_Rectangle();
это.Draw_Pie();
//Сохраняем нарисованное изображение в формате Gif в выходной поток ответа текущей страницы
bitmap.Save(this.Response.OutputStream,ImageFormat.Gif);
}
/// <сводка>
/// Выполняем первоначальные действия над рисуемым растровым изображением (можно представить как холст)
/// </сводка>
частная пустота Init_Bitmap()
{
растровое изображение = новое растровое изображение (400 200);
графика = Graphics.FromImage(растровое изображение);
графика.Очистить(Цвет.Белый);
графики.DrawString("Продажи компании
}
#region Код, созданный с помощью инструментов дизайна веб-форм
переопределить защищенную пустоту OnInit (EventArgs e)
{
//
// CODEGEN: это вызов, необходимый для средства разработки веб-форм ASP.NET.
//
ИнициализироватьКомпонент();
base.OnInit(е);
}
/// <сводка>
/// Этот метод необходим для поддержки средств проектирования — не используйте редактор кода для его изменения
/// Содержимое этого метода.
/// </сводка>
частная пустота InitializeComponent()
{
this.Load += новый System.EventHandler(this.Page_Load);
}
#конечныйрегион
/// <сводка>
/// Рисуем прямоугольник на холсте
/// </сводка>
частная пустота Draw_Rectangle()
{
интервал я;
PointFsymbolLeg = новый PointF(335,20);
PointF descLeg = новый PointF(360,16);
for (i = 0; i <arrValueNames.Length; i++)
{
графики.FillRectangle(новый SolidBrush(GetColor(i)),symbolLeg.X,symbolLeg.Y,20,10);
графики.DrawRectangle(Pens.Black,symbolLeg.X,symbolLeg.Y,20,10);
графики.DrawString(arrValueNames[i].ToString(),new Font("Новое детальное тело",8),Brushes.Black,descLeg);
символЛег.Y += 15;
descLeg.Y += 16;
}
для (я = 0; я <arrValues.Length; я++)
{
графики.FillRectangle(new SolidBrush(GetColor(i)),(i*35) + 15 200 - arrValues[i],20,arrValues[i]);
графики.DrawRectangle(Pens.Black,(i*35) + 15 200 - arrValues[i],20,arrValues[i]);
}
}
/// <сводка>
/// Нарисуем круговую фигуру на холсте
/// </сводка>
частная пустота Draw_Pie()
{
интервал я;
// currentangle представляет текущий угол Totalangle представляет максимальный угол Totalvalues представляет максимальные продажи
float sglCurrentAngle = 0, sglTotalAngle = 0, sglTotalValues = 0;
// Рассчитываем максимальные продажи
для (я = 0; я <arrValues.Length; я++)
sglTotalValues += arrValues[i];
для (я = 0; я <arrValues.Length; я++)
{
// Значение угла текущего месяца: продажи текущего месяца/максимальные продажи * 360
sglCurrentAngle = arrValues[i] / sglTotalValues * 360;
графики.FillPie(новый SolidBrush(GetColor(i)),240,95,100,100,sglTotalAngle,sglCurrentAngle);
графики.DrawPie(Pens.Black,240,95,100,100,sglTotalAngle,sglCurrentAngle);
sglTotalAngle += sglCurrentAngle;
}
}
#region Вспомогательная функция
частный цвет GetColor (int itemIndex)
{
Цвет Цвет;
переключатель (индекс элемента)
{
случай 0:
цвет = Цвет.Синий;
перерыв;
случай 1:
цвет = Цвет.Красный;
перерыв;
случай 2:
цвет = Цвет.Желтый;
перерыв;
случай 3:
цвет = Цвет.Фиолетовый;
перерыв;
случай 4:
цвет = Цвет.Оранжевый;
перерыв;
случай 5:
цвет = Цвет.Коричневый;
перерыв;
по умолчанию:
цвет = Цвет.Синий;
перерыв;
}
вернуть цвет;
}
#конечныйрегион
}
}