18105

Графические примитивы API Windows

Лекция

Информатика, кибернетика и программирование

Лабораторная работа №2 Графические примитивы API Windows 1. Отдельные пикселы Функция SetPixel рисует один пиксел растра. Она имеет такие аргументы: SetPixelhdc x y clr где hdc – контекст xy – координаты clr – цвет пиксела. Аргумент clr – имеет тип 4байтного COLORREF причем тр...

Русский

2013-07-06

77.01 KB

8 чел.

Лабораторная работа2

Графические примитивы API Windows

1. Отдельные пикселы

Функция SetPixel рисует один пиксел растра. Она имеет такие аргументы:

SetPixel(hdc, x, y, clr),

где hdc – контекст, x,y – координаты, clr – цвет пиксела. Аргумент clr – имеет тип 4-байтного COLORREF, причем три младших байта соответствуют компонентам Blue, Green, Red (в диапазоне от 0 до 255 каждая), а старший байт не используется. Цвет, кодируемый типом COLORREF, удобно задавать макросом Red(r,g,b). Функция SetPixel сама имеет тип COLORREF – она возвращает значение цвета пиксела. 

2. Линии

В состав API Windows входит несколько функций, которые рисуют прямые и кривые линии:

AngleArc 

дуга окружности с заданием углов

BOOL AngleArc(

 HDC hdc, // контекст устройства 

 int X, // x-координата центра окружности

 int Y, // y-координата центра окружности

 DWORD dwRadius, // радиус окружности 

 FLOAT eStartAngle, // начальный угол дуги

 FLOAT eSweepAngle  // конечный угол дуги

  );

Arc 

дуга эллипса

BOOL Arc(

 HDC hdc, // контекст устройства

 int nLeftRect, // x-координата левого верхнего угла

 int nTopRect, // y-координата левого верхнего угла

 int nRightRect, // x-координата правого нижнего угла

 int nBottomRect, // y-координата правого нижнего угла

 int nXStartArc, // x-координата начальной точки

 int nYStartArc, // y -координата начальной точки

 int nXEndArc, // x-координата конечной точки

 int nYEndArc  // y -координата конечной точки

  );

LineTo

рисование отрезка прямой линии от текущей позиции к заданной точке

BOOL LineTo(

   HDC hdc,      // контекст устройства

   int nXEnd,  // x-координата последней точки линии

   int nYEnd   // y-координата последней точки линии

  );

MoveToEx

задание текущей позиции графического вывода

BOOL MoveToEx(

   HDC hdc, // контекст устройства

   int X, // x- координата

   int Y, // y- координата 

   LPPOINT lpPoint  // адрес старой позиции

  );

Polyline 

ломаная линия из многих связанных между собой отрезков прямых (полилиния)

BOOL Polyline(

   HDC hdc, // контекст устройства

   CONST POINT *lppt, // адрес массива, содержащего конечную точку

   int cPoints  // количество точек в массиве

  );

PolylineTo

ломаная линия из многих связанных между собой отрезков прямых (полилиния)

BOOL PolylineTo(

   HDC hdc, // контекст устройства

   CONST POINT *lppt, // адрес массива точек 

   DWORD cCount  // количество точек в массиве

  );

3. Стиль линии. Перо.

Чтобы начать рисовать линии, напрмер, другим цветом, необходимо создать новое перо и выбрать его в контексте графического устройства. 

Создавая новое перо, нужно обязательно позаботиться об уничтожении предыдущего пера. Не следует пытаться уничтожить стандартные перья.

Типичная последовательность для вывода линии с заданным стилем может быть такой:

HPEN hPen, hPenOld;

hPen = CreatePen(PS_SOLID,1,RGB(255,0,0);

//формат CreatePen(стиль, толщина, цвет)

hPenOld = (HPEN)SelectObject(hdc,hPen);

. . . //здесь рисуем линии

SelectObject(hdc,hPenOld);   //выбираем предыдущее перо

DeleteObject(hPen);          //уничтожаем наше перо

Здесь создается перо, которое соответствует тонкой красной сплошной линии. После использования перо уничтожается.

Задание

Изобразить в центре экрана квадрат, движущийся по окружности и вращающийся вокруг своего центра.

Изменение координат центра квадрата и концов отрезков (сторон квадрата) можно задать через параметрическое уравнение окружности x=r cos t, y=r sint, t[0,2), r-радиус окружности.

Для создания вращения используем цикл, например, while 

t=0;

while(t<12.55){ // два оборота 

 x1=200+r*cos(t); //если окно 400х300

 y1=150+r*sin(t);  

 x2=200+r*cos(t+3.14/2);

 y2=150+r*sin(t+3.14/2);

 // (x1,y1)-координаты первой вершины квадрата

 // (x2,y2)-координаты второй вершины квадрата

 // для каждой следующей добавляем еще 3.14/2

 //находим x3 y3 x4 y4

 MoveToEx(hdc,x1,y1,NULL);

 LineTo(hdc,x2,y2);

 LineTo(hdc,x3,y3);

// аналогичные линии для 3-х других сторон

 t+=0.001;

}

Перед тем как рисовать новую позицию квадрата нужно подождать sleep(int ms) и, взяв белое перо, удалить старую позицию.

Для того, чтобы квадрат двигался по окружности, нужно создать подобный цикл для перемещения центра (вместо фиксированного 200,150).


 

А также другие работы, которые могут Вас заинтересовать

58474. Tolerance 58 KB
  Please open you work book at page fifty six exercise 1. Here you should fill in the gaps using these words: against, according to, of, without. I think 3 minutes on this work. Когда сделали, говорю: please read it one by one and then we will check the answers...
58475. Двомембранні органели і мітохондрії і пластиди. Фотосинтез, дихання 35.5 KB
  Мета: познайомити з будовою та функціями двомембранних органел: мітохондріями та пластидами, фазами мітозу, з клітинним циклом, поняттями, каріотип, фотосинтез, дихання, мітохондрія, хлоропласт, хемосинтез з процесами фотосинтезу та дихання, вчити порівнювати ці два процеси між собою...
58476. Урок биологии 165 KB
  Подготовка учителя к урокам. Постановка цели урока. Структура урока этапы комбинированного урока. Проведение урока биологии Перспективное и поурочное планирование Основой для планирования учебно-воспитательного образовательного процесса по биологии является анализ существующих нормативных требований программ учебных и дидактических пособий и опыта педагогической деятельности учителя.
58477. Вид. Критерии вида 45.5 KB
  Цели урока: обучающие: сформулировать определения понятиям вид критерии вида; изучить критерии вида и их содержание; развивающие: продолжить развитие коммуникативных умений при работе в группах устной монологической речи учащихся...
58478. Уроки Чистоты на территории Пермского края 3.73 MB
  Технологии сортировки отходов уже реализуются в некоторых российских городах. Для успешной организации сортировки очень важна первая ступень раздельный сбор отходов жителями. По статистике каждый из нас ежегодно образует 300 кг отходов.
58479. Рідна домівка, рідна сім’я – тут виростає доля моя. В.Гринько «Сім». В.Сухомлинський «Тетянка усміхається» 73 KB
  Доброго здоров’я всім В добрий день і в добрий час Рада всіх вітати вас. Який розділ ви почали вивчати на попередньому уроці Рідна домівкарідна сім’ятут виростає доля моя З якими піснями ви ознайомилися на минулому уроці Роде наш красний...
58480. Проектирование молодежного кафе – «KFC» 752 KB
  Молодежное кафе, как организация является обществом с ограниченной ответственностью предприятие бытового обслуживания (ООО ПБО). Общество с ограниченной ответственностью является разновидностью объединения капиталов, не требующего личного участия своих членов в делах общества
58481. Розробка програмного забезпечення (ПЗ) для інформаційної підтримки велодоріжок м. Хмельницький 16.04 MB
  До ПЗ розроблено специфікацію вимог, що описує функціональні та нефункціональні вимоги до нього. На основі цієї специфікації та аналізу предметної області, а також вибраних технологій та засобів розробки, здійснено проектування ПЗ для інформаційної підтримки велодоріжок м. Хмельницький.
58482. Ресурсы и факторы производства 90.5 KB
  Цели: Обучающие: познакомить учащихся с понятиями: ресурсы факторы производства процесс производства доходность факторов производства; научить школьников определению необходимых ресурсов для нового предприятия; Развивающие: привить интерес к изучаемому материалу...