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

Прямоугольники и регионы могут принимать участие в отсечении. Функция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.


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

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








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


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

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

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

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