Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Все рассмотренные выше функции базировались на вычерчивании графических примитивов определенными инструментами по заданным командам, т.е. по векторному принципу. Растровая графика предусматривает доступ к изображению на уровне образующих его точек.
Для большинства устройств отображения первичен растровый принцип формирования изображения. Некоторые контексты поддерживают не все функции растровой графики. Информацию о совместимости может предоставить функция 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 – комбинация по «ИЛИ», SRCINVERT – комбинация по «исключающему ИЛИ», SRCERASE – комбинация по «И» цвета источника и инверсии цвета приемника, NOTSRCCOPY, NOTSRCERASE – соответствует одноименным, но результирующий цвет инвертируется, DSTINVERT – инверсия фрагмента-приемника, BLACKNESS, WHITENESS – заполнение фрагмента-получателя цветом соответственно 0 и 1 физической палитры и другие. Для MaskBlt параметр включает операции для переднего и заднего фонов, формируется с помощью макроса MAKEROP 4.
Для успешного применения этих функций требуется, чтобы оба контекста относились к одному устройству или идентичным устройствам.
При использовании функций следует учитывать, что в логических координатных системах, связанных с обоими контекстами, отсчитываются только координаты опорных точек и размеры границ фрагмента, содержимое же его всегда ориентировано одинаково.
Эффекты, возникающие при деформации битового образа, дополнительно управляются функцией SetStretchBltMode, текущая настойка – GetStretchBltMode.
Дата публикования: 2015-09-17; Прочитано: 208 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!