Прямоугольники и регионы отсечения

Прямоугольники и регионы могут принимать участие в отсечении. ФункцияInvalidateRect делает недействительным прямоугольную область дисплея и генерирует сообщение WM_PAINT. Ее можно использовать, например, для обновления рабочей области:

InvalidateRect (hwnd, NULL, TRUE);

Получить координаты недействительного прямоугольника можно с помощью функции GetUpdate­Rect, а сделать действительным прямоугольник в рабочей области – ValidateRect.

Получая сообщение WM_PAINT, координаты недействительного прямо­угольника доступны из полей структуры PAINTSTRUCT, заполняемой при вызове функции BeginPaint. Этот недействительный прямоугольник также определяет регион отсечения, за пределами которого нельзя рисовать.

Для создания региона отсечения (выбрав регион в контекст устройства) используются функции

SelectObject (hdc, hRgn); SelectClipRgn (hdc, hRgn);

регион отсечения задается в координатах устройства.

Среда Windows содержит несколько функций для манипуляции с регионом отсечения, таких как ExcludeClipRect – исключение прямо­уголь­ника из региона отсечения; IntersectClipRect – создание нового региона отсечения, который представляет собой пересечение предыдущего региона отсечения и прямоугольника; OffsetClipRgn – перемещение региона отсечения в другую часть рабочей области.

 

Растровая графика

Все рассмотренные выше функции базировались на вычерчивании графических примитивов определенными инструментами по заданным командам, т.е. по векторному принципу. Растровая графика предусматривает доступ к изображению на уровне образующих его точек.

Для большинства устройств отображения первичен растровый принцип формирования изображения. Некоторые контексты поддерживают не все функции растровой графики. Информацию о совместимости может предоставить функция GetDeviceCaps().

Простейшим и наиболее универсальным способом получения произвольных изображений является доступ к отдельным его точкам. Функции

COLORREF SetPixel (hdc, nX, nY, crColor);

BOOL SetPixelV (hdc, nX, nY, crColor);

COLORREF GetPixel (hdc, nX, nY);

выполняют соответственно изменение состояния (цвета) одной логической точки и получение текущего состояния. Функция SetPixelV() приводит значение цвета к ближайшему представимому в данном контексте цвету; возвращаемое значение – состояние точки на момент вызова функции (COLORREF), либо признак успешности выполнения (BOOL). Параметры

nX, nY – логические координаты точки (int);

crColor – новое значение цвета точки (COLORREF).

Более сложные и эффективные функции манипулируют не отдельными точками, а массивами точек – фрагментами изображений и битовыми образами.

Битовый образ (bitmap) – двухмерный массив числовых значений, характеризующий состояние точек некоторой области, обычно прямоугольной.

В простейшем случае битовый образ описывается структурой BITMAP, содержащей поля:

LONG bmType – тип образа, должен быть равен 0;

LONG bmWidth, LONG bmHeight – положительные значения ширины и высоты прямоугольной области в пикселах;

LONG bmWidthBytes – размер в байтах образа одной строки изображения, в среде Windows должен быть кратен 2, т.к. система предполагает, что массив состоит из слов;

WORD bmPlanes – количество цветовых планов (плоскостей), т.е. компонент, задающих цвет;

WORD bmBitsPixel – количество бит для кодирования цвета точки;

LPVOID bmBits – указатель на двухмерный массив данных, каждая строка которого соответствует одной строке изображения.

Используются монохромный и цветной типы образов. В случае монохромного – одноцветовой план и один бит на точку, единичное значение этого бита задает для точки цвет переднего плана (foreground), нулевое – заднего (backgroung).

Битовые образы – объекты, идентифицирующиеся их описателями – HBITMAP. Различают совместимые и контекстно-незави­си­мые объекты BITMAP.

Функции

HBITMAP CreateBitmap ( int nWidth, int nHeight, UINT cPlanes,

UINT cBitsPerPel, const void* lpvBits );

HBITMAP CreateBitmapIndirect (const BITMAP* lpBitmap);

создают объект BITMAP с указанными характеристиками, возвращаемое значение – описатель объекта или NULL в случае ошибки; параметры:

nWidth, nHeight – размеры образа в точках изображения;

cPlanes – количество цветовых планов;

cBitsPerPel – «глубина» цвета;

lpvBits – массив данных образа;

lpBitmap – структура BITMAP, содержащая перечисленные параметры.

Функция

HBITMAP CreateCompatibleBitmap (hdc, int nWidth, int nHeight);

создает объект BITMAP совместимого типа для заданного контекста с заданными размерами; в зависимости от контекста он может быть создан цветным или монохромным (если в контексте заданы данные раздела DIB – контекстно-независимым); возвращаемое значение – описатель объекта или NULL; nWidth и nHeight – размеры образа.

Для доступа к содержимому битового образа предусмотрены функции SetDlBits() и GetDlBits(), которые работают построчно, однако имеется возможность воздействовать на него всеми доступными инструментами. Для этого объект BITMAP связывается с некоторым контекстом с помощью универсальной функции SelectObject(), после чего все изменения в контексте будут отображаться и в битовом образе.

Функции:

BOOL BitBlt (HDC hDstDC, int nDstX, int nDstY, int nDstWidth,

int nDstHeight,HDC hSrcDC, int nSrcX, int nSrcY, DWORD dwRop);

BOOL StretchBlt (HDC hDstDC, int nDstX, int nDstY, int nDstWidth,

int nDstHeight, HDC hSrcDC, int nSrcX, int nSrcY, int nSrcWidth,

int nSrcHeight, DWORD dwRop);

BOOL MaskBlt (HDC hDstDC, int nDstX, int nDstY, int nDstWidth,

int nDstHeight, HDC hSrcDC, int nSrcX, int nSrcY,

HBITMAP hbmMask, int nMaskX, int nMaskY, DWORD dwRop);

BOOL PlgBlt (HDC hDstDC, const POINT* lpDstVertices, HDC hSrcDC,

int nSrcX, int nSrcY, HBITMAP hbmMask, int nMaskX, int nMaskY,

DWORD dwRop);

выполняют перенос прямоугольного фрагмента изображения из контекста-источника в контекст-приемник (с трансформацией и дополнительными операциями). Функция StretchBlt может изменять масштаб изображения фрагмента; MaskBlt позволяет маскировать часть изображения; PlgBlt осуществляет перенос в непрямоугольную область приемника с соответствующим искажением; возвращаемое значение – признак успешности выполнения; параметры:

hSrcDC, hDstDC – контексты источника и приемника данных;

nSrcX, nSrcY, nDstX, nDstY – координаты фрагмента в обоих контекстах;

nSrcWidth, nSrcHeight, nDstWidth, nDstHeight – размеры фрагментов;

hbmMask – битовый образ маски, монохромного типа, нулевые точки маски указывают на применение к данной точке изображения операции «заднего плана», единичные – «переднего плана»;

nMaskX, nMaskY – точка привязки в образе маски;

lpDstVertices – массив структур, задающих вершины параллелограмма, образующего фрагмент-приемник;

dwRop – дополнительная операция, применяемая к фрагменту при переносе: SRCCOPY – простое копирование, SRCAND – комбинация цветов источника и приемника по «И», SRCPAINT – комбинация по «ИЛИ», SRCIN­VERT – комбинация по «исключающему ИЛИ», SRCERASE – комбинация по «И» цвета источника и инверсии цвета приемника, NOTSRCCOPY, NOT­SRCERASE – соответствует одноименным, но результирующий цвет инвертируется, DSTINVERT – инверсия фрагмента-приемника, BLACK­NESS, WHITE­NESS – заполнение фрагмента-получателя цветом соответственно 0 и 1 физической палитры и другие. Для MaskBlt параметр включает операции для переднего и заднего фонов, формируется с помощью макроса MAKEROP4.

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

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

Эффекты, возникающие при деформации битового образа, дополните­льно управляются функцией SetStretchBltMode, текущая настойка –GetStretchBltMode.

 

ЛИТЕРАТУРА

 

1. Аксенкин, М. А. Язык С / М. А. Аксенкин, О. Н. Целобенок. – Минск : Унiверсiтэцкае, 1995.

2. Архангельский, А. Я. Программирование в С++ Builder 6 / А. Я. Архангельский. – М. : ЗАО «Издательство БИНОМ», 2002.

3. Березин, Б. И. Начальный курс С и С++ / Б. И. Березин, С. Б. Березин. – М. : Диалог– МРТИ, 1999.

4. Берри, В. Язык Си: введение для программистов / В. Берри, Б. Микинз. – М. : Финансы и статистика, 1988.

5. Больски, М. Н. Язык программирования Си: справочник / М. Н. Больски. – М. : Радио и связь, 1988.

6. Программирование: лаб. практикум для студ. 1–2-го курсов всех спец. БГУИР и всех форм обуч. Ч.2. Основы программирования на алгоритмическом языке С / В. Л. Бусько [и др.]. – Минск : БГУИР, 2005.

7. Основы алгоритмизации и программирования: конспект лекций для студ. всех спец. и всех форм обуч. БГУИР / В. Л. Бусько [и др.]. – Минск : БГУИР, 2004.

8. Бухтияров, А. М. Сборник задач по программированию на алгоритмических языках / А. М. Бухтияров, Г. Д. Фролов. – М. : Статистика, 1978.

9. Бабэ, Б. Просто и ясно о Borland C++ / Б. Бабэ. – М. : БИНОМ, 1995.

10. Бадд, Т. Объектно-ориентированное программирование в действии / Т. Бадд. – СПб. : Питер, 1997.

11. Вайнер, Р. С++ изнутри / Р. Вайнер, Л. Пинсон – Киев : ДиаСофт, 1993.

12. Вирт, Н. Алгоритмы и структуры данных / Н. Вирт. – СПб. : Невский диалект, 2001.

13. Вирт, Н. Алгоритмы + структуры данных = программы / Н. Вирт. – М. : Мир, 1985.

14. Дейтел, Х. М. Как программировать на С / Х. М. Дейтел, П. Дж. Дейтел. – М. : БИНОМ, 2006.

15. Демидович, Е. М. Основы алгоритмизации и программирования. Язык Си / Е. М. Демидович. – Минск : Бест­принт, 2001.

16. Джехани, Н. Программирование на языке Си / Н. Джехани // Радио и связь, 1988.

17. Дэвис, С. С++ для «чайников» / С. Дэвис. – Киев : Диалектика, 1996.

18. Касаткин, А. И. Профессиональное программирование на языке Си: Oт Turbo-C к Borland C++: справ.пособие / А. И. Касаткин, А. Н. Вольвачев. – Минск : Выш. шк., 1992.

19. Касаткин, А. И. Профессиональное программирование на языке Си. Управление ресурсами: справ.пособие / А. И. Касаткин. – Минск : Выш.шк., 1992.

20. Керниган, Б. Язык программирования Си / Б. Керниган, Д. Ритчи. – М. : Финансы и статистика, 1992.

21. Керниган, Б. Язык программирования Си. Задачи по языку Си / Б. Керниган, Д. Ритчи, А. Фьюэр. – М. : Финансы и статистика, 1985.

22. Керниган, Б. Универсальная среда программирования UNIX / Б. Керниган, Р. Пайк. – М. : Финансы и статистика, 1992.

23. Климова, Л. И. С++. Практическое программирование / Л. И. Климова. – М. : Кудиц-Образ, 2001.

24. Кнут, Д. Искусство программирования: т. 1–3. Основные алгоритмы / Д. Кнут. – М. : Издательский дом «Вильямс», 2004.

25. Котлинская, Г. П. Программирование на языке Си / Г. П. Котлинская, О. И. Галиновский. – Минск : Выш.шк., 1991.

26. Методы алгоритмизации / В. М. Котов [и др.]. – Минск : Народная асвета, 1996.

27. Котов, В. М. Методы алгоритмизации: учеб. пособие / В. М. Котов, О. И. Мельников. – Минск : Народная асвета, 2000.

28. Котов, В. М. Структуры данных и алгоритмы: учеб. пособие / В. М. Котов, Е. П. Соболевская. – Минск : БГУ, 1996.

29. Программирование на С и С++ / А. В. Крячков [и др.]. – М. : Горячая линия – Телеком, 2000.

30. Морозов, А. А. Структуры данных и алгоритмы: учеб. пособие : в 2 ч. / А. А. Морозов. – Минск : БГПУ им. М. Танка. Ч. 1. – 2000, Ч. 2. – 2001.

31. Павловская, Т. А. С/С++. Программирование на языке высокого уровня / Т. А. Павловская. – СПб. : Питер, 2004.

32. Павловская, Т. А. С/С++. Структурное программирование : Практикум / Т. А. Павловская, Ю. А. Щупак. – СПб. : Питер, 2002.

33. Павловская, Т. А. С++. Объектно-ориентированное программирование : практикум / Т. А. Павловская, Ю. А. Щупак. – СПб. : Питер, 2004.

34. Петзольд, Ч. Программирование для Windows 95 / Ч. Петзольд. – BHV.: СПб. : БИНОМ, 1997.

35. Подбельский, В. В. Программирование на языке Си / В. В. Подбельский, С. С. Фомин. – М. : Финансы и статистика, 2001.

36. Подбельский, В. В. Язык С++ / В. В. Подбельский. – M. : ФиС, 2001.

37. Пол, И. Объектно-ориентированное программирование с использованием С++ / И. Пол. – Киев : ДиаСофт, 1995.

38. Романовская, Л. М. Программирование в среде СИ для ПЭВМ ЕС / Л. М. Романовская, Т. В. Русс, С. Г. Свитковский. – М. : Финансы и статистика, 1992.

39. Практикум по программированию на алгоритмических языках /
Г. И. Светозарова [и др.]. – М. : Наука, 1980.

40. Синицын, А. К. Конспект лекций по курсу «Программирование» для студ. 1–2-го курсов всех спец. БГУИР / А. К. Синицын. – Минск : БГУИР, 2001.

41. Синицын, А. К. Программирование алгориттмов в среде Builder C++: лаб.практикум по курсам «Программирование» и «Основы алгоритмизации и программирование» для студ. 1-2 курсов всех спец. БГУИР дневн.
и веч. форм обуч.: в 2 ч. / А. К. Синицын. – Минск : БГУИР. Ч. 1. – 2004, Ч. 2. – 2005.

42. Страуструп, Б. Язык программирования С++ / Б. Страуструп. – СПб. : БИНОМ, 1999.

43. Тимофеев, В. В. Программирование в среде С++ Builder 5 / В. В. Тимофеев. – М. : БИНОМ, 2000.

44. Топп, У. Структуры данных в С++: пер. с англ. / У. Топп, У. Форд. – М. : ЗАО «Издательство БИНОМ», 2000.

45. Уингер, Р. Язык Турбо Си / Р. Уингер. – М. : Мир, 1991.

46. Успенский, В. А. Теория алгоритмов : основные открытия и приложения / В. А. Успенский, А. А. Семенов. – М., 1987.

47. Уэйт, М. Язык Си. Руководство для начинающих / М. Уэйт, С. Прама, Д. Мартин. – М. : Мир, 1988.

48. Фьюэр, А. Задачи по языку Си / А. Фьюэр. – М. : Финансы и статистика, 1985.

49. Холзнер, С. Visual C++ 6. Учебный курс / С. Холзнер. – СПб. : Питер, 1999.

50. Хэнкок, Л. Введение в программирование на языке Си / Л. Хэнкок, М. Кригер. – М. : Радио и связь,1986.

51. Шилд, Г. Программирование на Borland С++ / Г. Шилд. – Минск : ПОПУРРИ, 1999.

52. Юлин, В. А. Приглашение к Си / В. А. Юлин, И. Р. Булатова. – Минск : Выш.шк., 1990.

 

 


* Здесь и далее по тексту объектами будем называть элементы, участвующие в программе.

* Более подробное описание функции main рассматривается в п. 11.7.








Дата добавления: 2016-09-20; просмотров: 476;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.028 сек.