СП - ASM / Лабораторная работа №4 Графика в Windows
.docЛабораторная работа №10
ОСНОВЫ РАСТРОВОЙ И ВЕКТОРНОЙ ГРАФИКИ GDI Win32
Цель работы: изучить возможности GDI и освоить основные способы создания растровых и векторных изображений с использованием функций GDI Win32.
Методические рекомендации
При подготовке к лабораторной работе самостоятельно на основе материалов лекций, рекомендованной литературы, справочной системы Win32 API, MSDN и Internet изучить принципы формирования графических изображений средствами GDI Win32. При этом изучить назначение и параметры таких структур данных, объектов GDI, сообщений и функций Win32 API:
-
структуры данных: COLORREF, POINT, POINTS, RECT, PAINTSTRUCT, BITMAP, LOGPEN, LOGBRUSH, LOGFONT;
-
для создания и освобождения графического контекста: BeginPaint(), EndPaint(), GetDC(), ReleaseDC(), GetWindowDC(), ReleaseDC(), CreateDC(), ReleaseDC(), CreateCompatibleDC() и др.;
-
для получения характеристик графического устройства GetDeviceCaps(),GetSystemMetrics() и др.;
-
для выбора объекта рисования SelectObject(),DeleteObject();
-
для создания растровых изображений: GetPixel(), SetPixel(), RGB(), GetRValue(), GetGValue(), GetBValue(), FloodFill(), ExtFloodFill(), LoadImage(), CreateBitmap(), CreateBitmapIndirect(), CreateCompatibleBitmap(), BitBlt(), StretchBlt();
-
для создания векторных изображений: объекты GDI Pen, Brush, Font и соответствующие им функции CreatePen(), CreatePenIndirect(), CreateBrushIndirect(), CreateHatchBrush(), CreatePatternBrush(), CreateSolidBrush(), CreateFont(), CreateFontIndirect(),
- для формирования линий изображения MoveToEx(), AngleArc(), Arc(), ArcTo(), GetArcDirection(), LineTo(), PolyBezier(), PolyDraw(), Polyline(), PolylineTo(), PolyPolyline(), SetArcDirection();
- для формирования областей изображения Chord(), Ellipse(), FillRect(), FrameRect(), Pie(), Polygon(), PolyPolygon(), Rectangle(), RoundRect() и т.д.
- для формирования текстовых подписей TextOut(), ExtTextOut(),SetTextColor() и т.д.
-
для обеспечения актуальной перерисовки изображений: функции InvalidateRect(), ValidateRect(), сообщения WM_PAINT, WM_ERASEBKGND, WM_NCPAINT;
-
для обмена данными между процессами с использованием каналов (pipes): CreatePipe().
Ход работы
На основе программ, созданных при выполнении лабораторных работ №№5-7:
-
В главное меню программы ЛР№7 добавить пункт «Изображение» а в него подпункты «Сведения о графическом устройстве», «Растровое», «Векторное».
-
При выборе пункта «Сведения о графическом устройстве» в окне сообщений (MessageBox) выдать заданные индивидуальным вариантом (табл. 8.1) сведения о требуемых настройках графического устройства.
-
В пункт «Растровое» добавить подпункты «Загрузить из файла», «Расчет»1, «Поворот»2. При выборе пункта «Загрузить из файла» вызывать стандартный диалог открытия файлов с режимом открытия файлов только с расширением *.bmp. После закрытия диалога изобразить содержимое выбранного графического файла в исходном размере и в размере заданном вариантом (табл. 8.1).
При выборе пункта «Расчет» определить на изображении количество пикселей заданного цвета.
При выборе пункта «Поворот» повернуть исходное изображение на заданный угол.
-
В пункт «Векторное» добавить подпункты «График», «Диаграмма».
При выборе пункта «График» вывести в главное окно график 5 периодов заданной функции (табл. 8.1) в системе координат с подписями осей. Подписи вертикальной оси должны быть повернуты на 900 против часовой стрелки (пример: ). Цвет линии графика и шрифт подписи должен задаваться пунктами меню «Опции»-«Настройка»-«Цвет» и «Опции»-«Настройка»-«Шрифт» (см. ЛР №№5-7).
При выборе пункта «Диаграмма» вывести диаграмму заданного вида (табл. 8.1). Количество делений диаграммы и их значения задать случайным образом из заданного диапазона. С использованием всплывающего (PopUp) меню обеспечить выбор параметров линий и заливок диаграммы: цвета, стиля, толщины и т.п.3.
Варианты заданий
№ вар. |
Сведения об устройстве |
Размер изображения, см |
Функция |
Вид диаграммы |
Количество значений диаграммы |
Диапазон значений диаграммы |
|
размер по горизонтали (в пикселях), разрешающая способность (пикс/дюйм) |
69 |
y=sin(x) |
5 |
-100..100 |
|
|
размер по горизонтали (в дюймах), разрешающая способность (пикс/см) |
34 |
y=cos(x) |
3 |
-50..200 |
|
|
размер по горизонтали (в см), разрешающая способность (пикс/см) |
56 |
y=2cos(x)+/2 |
5 |
100..200 |
|
|
размер по вертикали (в пикселях), разрешающая способность (пикс/дюйм) |
912 |
y=3sin(2x) + cos(x) |
3 |
10..20 |
|
|
размер по вертикали (в дюймах), разрешающая способность (пикс/см) |
1015 |
y=sin(x) + sin(2x) |
5 |
150..500 |
|
|
размер по вертикали (в см), разрешающая способность (пикс/см) |
1010 |
y=3 - sin(4x) + sin(5x) |
7 |
-100..100 |
|
|
размер по горизонтали (в пикселях), разрешающая способность (пикс/дюйм) |
96 |
y=3cos(3x)+/2 |
5 |
-50..200 |
|
|
размер по горизонтали (в дюймах), разрешающая способность (пикс/см) |
43 |
y=sin(x) |
3 |
100..200 |
|
|
размер по горизонтали (в см), разрешающая способность (пикс/см) |
66 |
y=cos(x) |
2 |
10..20 |
|
|
размер по вертикали (в пикселях), разрешающая способность (пикс/дюйм) |
129 |
y=2cos(x)+/2 |
2 |
150..500 |
|
|
размер по вертикали (в дюймах), разрешающая способность (пикс/см) |
1510 |
y=3sin(2x) + cos(x) |
5 |
-100..100 |
|
|
размер по вертикали (в см), разрешающая способность (пикс/см) |
510 |
y=sin(x) + sin(2x) |
3 |
-50..200 |
|
|
размер по горизонтали (в пикселях), разрешающая способность (пикс/дюйм) |
105 |
y=3 - sin(4x) + sin(5x) |
5 |
100..200 |
|
|
размер по горизонтали (в дюймах), разрешающая способность (пикс/см) |
78 |
y=3cos(3x)+/2 |
7 |
10..20 |
|
|
размер по горизонтали (в см), разрешающая способность (пикс/см) |
87 |
y=1 + sin(4x) + sin(5x) |
4 |
150..500 |
Контрольные вопросы
-
Что такое GDI?
-
Что такое контекст устройства в GDI? Как его получить?
-
Какие возможны контексты устройства в GDI? Их назначение.
-
Понятие растрового изображения. Основные функции при создании растрового изображения.
-
Порядок создания растрового изображения средствами GDI.
-
Понятие векторного изображения. Основные функции при создании векторного изображения.
-
Порядок создания векторного изображения средствами GDI.
-
Понятие шрифта в GDI. Порядок вывода текстовой надписи средствами GDI.
-
Другие способы вывода графики в Win32.
Литература
-
Финогенов К.Г. Win32. Основы программирования. - М.: ДИАЛОГ-МИФИ, 2002. - 416 с.
-
Шилдт Г. Программирование на С и С++ для Windows 95 - К.: BHV, 1996 - 400 с.
-
Электронный ресурс: www.google.com.
1 Создание и обработка этого пункта меню – при желании студента. Считается, что оценки А и В можно получить только имея желание выполнять задания в полном объеме и более.
2 Создание и обработка этого пункта меню – при большом желании студента (см. также сноску 1).
3 Использование всплывающего меню - по желанию (см. также сноску 1).