русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Создание проекта на С# в Visual Studio 2005-2008

Начало работы.

File / New Project / C# / Windows Application / (это означает, что в проекте будет классическое окно Windows).

Дальше рекомендуется выставить Property / BkColor / White;
Text = Caption.

Алгоритмическая часть проекта.

Как в любом классическом Windows проекте Wizard создает окошко, но ничего не рисует в нем. Мы создадим проект, который обрабатывает сообщение WM_PAINT – это сообщение передается на обработку программе непосредственно в момент создания окна, если происходят дефекты окне. Для того, чтобы по этому сообщению программа выводила содержимое окна, в property нужно задать режим вывода event (обработка сообщений). В этой технологии отсутствуют header-файлы и include.


Текст программы.

// ЗАДАНИЕ: вывести изображение графических примитивов средствами GDI+ :
// Программу писать на языке C# для среды NetFramework v.2.0 (средствами компилятора MSVS2005)
// ===========================================================
// Пример выполнения задания:
// ===========================================================

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;          //Доступ к методам GDI+
using System.Drawing.Drawing2D;//Добавить для расширения доступа к GDI+
using System.Text;
using System.Windows.Forms;

namespace MyGDIp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
       // Form1_Paint() - метод-обработчик сообщений WM_PAINT
       // sender - ссылка на источник сообщения: наше окно Form1
       // e - ссылка на родителя класса Graphics ( == в Graphics функции GDI+ ) 
       // Операторы в эту функцию (метод) Form1_Paint() записывает студент !!!
       //1 Создание экземпляра GDIp - объекта с функциями GDI+ на базе Graphics (обязательный шаг до обращения к GDI+ !!!) 
           Graphics GDIp = e.Graphics;
       //2 Закрашиваем всю рабочую часть окна проекта белым цветом
            GDIp.Clear(Color.White);
       //3 Вывод текста x=0,y=0
           GDIp.DrawString("Вывод графики средствами GDI+ :", new Font("Helvetica", 27), Brushes.Red, 0, 0);
       //4 Рисование прямых линий(X1,Y1 начало лин)X1  Y1   X2  Y2 (линия между: X1,Y1,X2,Y2)
            GDIp.DrawLine(new Pen(Color.Magenta), 10, 50, 550, 50);               // 4.1
            GDIp.DrawLine(new Pen(Brushes.Green, 2), 10, 60, 550, 60);             // 4.2
            GDIp.DrawLine(new Pen(Brushes.Blue, 4), 550, 70, 10, 70);//X1 > X2 !!! // 4.3
            Pen myPen = new Pen(Color.Black, 3);
       //!!!Для обеспечения работоспособности следующего (и ряда операторов ниже)
       //!!!надо вписать в начале этого файла namespace: using System.Drawing.Drawing2D;
            myPen.DashStyle = DashStyle.Dash;//стиль рисования линии:
            GDIp.DrawLine(myPen, 550, 80, 10, 80);//линия: // 4.4
            myPen.DashStyle = DashStyle.DashDot;  //стиль:__._.
            GDIp.DrawLine(myPen, 550, 90, 10, 90);//линия: // 4.5
            myPen.DashStyle = DashStyle.DashDotDot; //стиль:_
            GDIp.DrawLine(myPen, 550, 100, 10, 100);//линия:// 4.6
            myPen.Width = 7; myPen.DashStyle = DashStyle.Solid;
          //стиль рисования линии: непрерывная, толщиной = 7 pix
          //Формирование изображения концов линии 
            myPen.StartCap = LineCap.ArrowAnchor;//стрела в начале линии
          //myPen.EndCap = LineCap.DiamondAnchor;//ромб в конце линии
            myPen.EndCap = LineCap.RoundAnchor;  //окружность в конце  линии
            GDIp.DrawLine(myPen, 10, 110, 546, 110);// == линия-стрела // 4.7
       //5 Наклонные линии (удалим появления неровности линий с малым углом наклона)
           GDIp.DrawLine(new Pen(Color.Black, 3), 10, 118, 550, 129);//неровная      // 5.1
           GDIp.SmoothingMode = SmoothingMode.HighQuality; // режим сглаживания неровности линий
           GDIp.DrawLine(new Pen(Color.Black, 3), 10, 128, 550, 139);//ровная !!!    // 5.2
       //6 Рисование прямоугольников               X1  Y1   dX   dY 
           GDIp.DrawRectangle(new Pen(Color.Green, 5), 10, 150, 250, 30);//обычный   // 6.1
            LinearGradientBrush gradBrush = new LinearGradientBrush(new Rectangle(0, 0, 280, 30), Color.Red, Color.Yellow, LinearGradientMode.Horizontal);
           GDIp.FillRectangle(gradBrush, 300, 150, 250, 30);//с градиентной заливкой // 6.2
           LinearGradientBrush gradBrush2 = new LinearGradientBrush(new Rectangle(0, 0, 50, 30), Color.Red, Color.Yellow, LinearGradientMode.Horizontal);
           GDIp.FillRectangle(gradBrush2, 300, 190, 250, 30);//с градиентной заливкой// 6.3
           GDIp.FillRectangle(new HatchBrush(HatchStyle.HorizontalBrick, Color.Yellow, Color.Red), 10, 190, 250, 30);//заливка=кирпичи // 6.4
                 GDIp.FillRectangle(new HatchBrush(HatchStyle.Wave, Color.Yellow, Color.Red), 10, 230, 250, 30);//заливка=волнистыми линиями // 6.5
       //7 Кусочно-линейная замкнутая кривая (соединяет точки массива Point)          X   Y
        Point[] myPoints = { new Point(312, 230), new Point(340, 260), new Point(370, 238), new Point(400, 260), new Point(430, 238), new Point(460, 260), new Point(490, 230) };
       GDIp.DrawPolygon(new Pen(Color.Red, 6), myPoints);// автоматически замкнула точки начала и конца
      // Заливка с градиентом нескольких (>2) цветов
           Point[] myPoints1 = { new Point(580, 210), new Point(580, 260), new Point(480, 260) };//треугольник действия заливки
            PathGradientBrush pgradBrush = new PathGradientBrush(myPoints1);// кисть для заданного треугольника
                pgradBrush.SurroundColors = new Color[] { Color.Lime, Color.Yellow, Color.Cyan};//цвета для углов треугольника
                GDIp.FillRectangle(pgradBrush, 480, 210, 100, 50);//прямоугольник с залитым треугольником внутри
      //8 Эллипс                              X1  Y1   dX  dY
          GDIp.DrawEllipse(new Pen(Color.Red, 5), 10, 267, 80, 30);      //Draw... = без заливки
           GDIp.FillEllipse(new SolidBrush(Color.Blue), 95, 267, 80, 30); //Fill... = с заливкой
      //9 Сегмент эллипса                     X1  Y1  dX dY Гр1 Гр2
          GDIp.DrawArc(new Pen(Color.Red, 5), 180, 267, 80, 30, 0, 270);   //0 - градусы от вертикальной оси Х до начала сегмента(с "+" = против часовой стр.) , 270 - градусы, занимаемые всей кривой сегмента
      //10 Замкнутый сегмент эллипса                 X1  Y1   dX  dY Гр1 Гр2
          GDIp.FillPie(new SolidBrush(Color.Blue), 265, 267, 80, 30, 0, 270);//0, 270 - градусы (см. предыдущий коментарий)
         //Фигуры (эллипсы) с разной степенью прозрачности == задаем alpha (0-255) в старших битах значении цвета
           GDIp.FillEllipse(new SolidBrush(Color.FromArgb(255, 0,0,255)),    350, 267, 80, 30); //Fill... = с заливкой
                GDIp.FillEllipse(new SolidBrush(Color.FromArgb(100, 255,0,0)),    400, 267, 80, 30); //Fill... = с заливкой
                GDIp.FillEllipse(new SolidBrush(Color.FromArgb( 50, Color.Green)),450, 267, 80, 30); //Fill... = с заливкой
                GDIp.FillEllipse(new SolidBrush(Color.FromArgb(255, Color.Red)),  500, 267, 80, 30); //Fill... = с заливкой
      //11 Кривые из отрезков парабол третьего порядка (кривые Безье и классических сплайнов)
      //11.1 Кривые Безье (кривые из отрезков: кубические сплайны = полиномы третьего
      //   порядка)с заданием направления касательных в концах каждого сплайна
           Point[] myPoints2 ={new Point(10,320), //myPoints2 = массив значений X,Y для 3-х сплайнов
       new Point(10,340),new Point(40,340),
       new Point(40,320),
       new Point(40,340),new Point(70, 340),
       new Point(70, 320),
       new Point(70, 300),new Point(100, 300),
       new Point(100, 320)};
           GDIp.DrawBeziers(new Pen(Color.Red, 1), myPoints2);// кривая Безье
         //Замкнутая кривая Безье (сиивол бесконечности) начальная и конечная точки совпадают
           Point[] myPoints3 ={new Point(110,320), //myPoints3 = массив значений X,Y для 4-х
                                                //сплайнов с совпадением координат начала и конца кривой
          new Point(110,300),new Point(140,300),
       new Point(155,320),
       new Point(170,340),new Point(200, 340),
       new Point(200, 320),
       new Point(200, 300),new Point(170, 300),
       new Point(155, 320),
       new Point(140, 340),new Point(110, 340),
       new Point(110, 320)};//совпадает с начальной
           GDIp.DrawBeziers(new Pen(Color.Red, 3), myPoints3);// кривая Безье = бесконечность
       //11.2 Кривые на базе канонических (стандартных, обычных) кубических сплайнов (без задания касательных)
          //Соединяем пять точек == аналог звезды (60ч40)
            Point[] myPoints4 ={ new Point(210, 310), new Point(270, 310), new Point(210, 330), new Point(240, 300), new Point(270, 330) }; //массив значений X,Y для 5-ти точек кривой
              GDIp.DrawCurve(new Pen(Color.Red, 4), myPoints4, 0,4, 0.0f);//0.0f = жесткость кривой
             Point[] myPoints5 ={ new Point(280, 310), new Point(340, 310), new Point(280, 330), new Point(310, 300), new Point(340, 330) }; //массив значений X,Y для 5-ти точек кривой
            GDIp.DrawCurve(new Pen(Color.Red, 4), myPoints5, 0, 4, 0.6f);//0.6f = жесткость кривой
          //Вводим автоматическое соединение крайних точек кривой без заливки
            Point[] myPoints6 ={ new Point(350, 310), new Point(410, 310), new Point(350, 330), new Point(380, 300), new Point(410, 330) }; //массив значений X,Y для 5-ти точек кривой
            GDIp.DrawClosedCurve(new Pen(Color.Red, 4), myPoints6, 0.6f, FillMode.Alternate);//0.6f = жесткость кривой
          //Вводим заливку (Fill...)
            Point[] myPoints7 ={ new Point(420, 310), new Point(480, 310), new Point(420, 330), new Point(450, 300), new Point(480, 330) }; //массив значений X,Y для 5-ти точек кривой
            GDIp.FillClosedCurve(new SolidBrush(Color.Red), myPoints7, FillMode.Alternate, 0.6f);//0.6f = жесткость кривой
            Point[] myPoints8 ={ new Point(490, 310), new Point(550, 310), new Point(490, 330), new Point(520, 300), new Point(550, 330) }; //массив значений X,Y для 5-ти точек кривой
                           GDIp.FillClosedCurve(new SolidBrush(Color.Red), myPoints7, FillMode.Winding, 0.6f);//0.6f = жесткость кривой                               
        }
    }
}

Ниже приведен вывод на экран монитора этой программой:

Просмотров: 9602

Вернуться в оглавление:Компьютерная графика




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.