
- •Системное по. Цели, задачи, классификация
- •Операционная система. Основные функции ос. Структура операционной системы.
- •Общая характеристика операционных систем Microsoft: семейства dos, Windows
- •Интерфейс прикладных программ (api). Apidos (программные прерывания) и Win32
- •Дисковая подсистема в архитектуре ibmpc
- •Низкоуровневая организация дисковой памяти. Сервис bios доступа к дисковой подсистеме.
- •Понятие файловой системы. Назначение, требования, функции. Способы организации фс.
- •Объекты файловой системы: файлы, директории, логические устройства, другие виды объектов.
- •Файловые системы на основе fat
- •X.2 Файловая система ntfs
- •Служебные структуры fat и их использование
- •Программный интерфейс файловой системы (функции для взаимодействия с фс, файлового ввода-вывода) – dos, Windows Функции общего назначения
- •Файловый ввод-вывод
- •14. Адресное пространство процесса (задачи).
- •15. Приложения Windows (Win 32), разновидности. Структура оконных приложений
- •1. Основные определения
- •2. Особенности приложений Win 32.
- •3. Событийное управление
- •4. Структура приложения
- •16. Окно Win32: назначение, виды, свойства. Оконные классы.
- •17. Создание и управление окнами.
- •18. Событийное управление в Win32. Сообщения и очереди сообщений Windows (Windowsmessages): назначение, структура, отсылка, доставка, обработка Сообщения и очереди сообщений.
- •19. Цикл обработки сообщений. Оконная процедура: назначение, выполнение, способы активизации и завершения.
- •20. Многозадачность, многозадачные операционные системы, особенности выполнения приложений в многозадачной среде. Модель многозадачности Win 32
- •21. Состояния процессов (многозадачная среда). Состояния процессов (потоков)
- •22. Многозадачность в win32. Планирование и выполнения программ в win32
- •23. Процессы win32. Атрибуты и состояния процессов. Порождение процессов и управление ими. Основы управления процессами Win32
- •24. Потоки и многопоточные приложения. Порождение потоков, состояние потоков, управление ими. Основы управления потоками Win32
- •25. Нити – альтернативное управление выполнением программы Управление нитями
- •26. Распределение времени выполнения программ в многозадачной системе. Приоритеты. Распределение времени между потоками (управление приоритетами)
- •27. Приоритеты процессов и потоков win32. Управление приоритетами.
- •28. Взаимодействие процессов/потоков, взаимное исключение, синхронизация (базовые сведения)
- •29. Реализация взаимного исключения. Механизм criticalsection.
- •30. Синхронизация при управлении процессами и потоками
- •31. Функция ожидания
- •32. Использование каналов и почтовых ящиков для обмена данными
- •33. Использование файловой системы для обмена данными
- •X.2.6. Использование сообщения wm_copydata
- •34. Графическая подсистема win32 – общая характеристика, основные принципы.
- •35. Основные объекты win32 gdi. Средства векторной и растровой графики
- •Растровая графика
- •36. Подсистема памяти. Основные задачи, функции, требования
- •37. Виртуальное адресное пространство, управление памятью.
- •38. Динамическое распределение памяти программами (heap). HeapApiWin32.
- •Функции работы с кучами (heap-область)
- •39. Подсистема памяти win32. Регионы(области) памяти. Группы функций api подсистемы памяти. Адресное пространство процесса.
- •40. Управление на уровне менеджера вирнуальной памяти. (vmm)
- •41. Отображение файлов в память Проецирование файлов в память
- •42. Системный реестр windows: назначение, организация, доступ
Растровая графика
Все рассмотренные выше функции базировались на вычерчивании определенными инструментами графических примитивов по заданным командам, т.е. по векторному принципу. Растровая графика предусматривает доступ (индивидуальном или "коллективном") к изображению на уровне образующих его точек, расположение которых не обязательно описывается в "векторном" виде. Оба типа графики обладают собственными достоинствами и недостатками и фактически тесно взаимосвязаны: для большинства устройств отображения первичен растровый принцип формирования изображения, но преобразования "инструментальных" примитивов в растр прозрачно для вызовов API.
Некоторые контексты поддерживают не все функции растровой графики. Информацию о совместимости может предоставить функция GetDeviceCaps().
Простейшим и наиболее универсальным способом получения произвольных изображений является доступ к отдельным его точкам.
Форматфункций:
COLORREF SetPixel(HDC hDC, int nX, int nY, COLORREF crColor);
BOOL SetPixelV(HDC hDC, int nX, int nY, COLORREF crColor);
COLORREF GetPixel(HDC hDC, int nX, int nY);
Действие функций: соответственно изменение состояния (цвета) одной логической точки и получение текущего состояния. Функция SetPixelV() отличается тем, что приводит значение цвета к ближайшему представимому в данном контексте; согласно документации, выполняется несколько быстрее.
Возвращаемое значение: состояние точки на момент вызова функции (COLORREF) либо признак успешности выполнения (BOOL).
Параметры:
hDC – контекст
nX, nY – логические координаты точки
crColor – новое значение цвета точки.
Отметим, что здесь и далее согласно принятой терминологии элементы битового образа именуются пикселами (соответствует буквальному значению слова), однако координаты и размеры задаются, как правило, в логических единицах, в то время как приксельные координаты принято отождествлять с физическими. Впрочем, для растровой графики это обычно не принципиально, т.к. изображение существует фактически в собственной системе измерений и преобразуется только в процессе вывода.
Более сложные (и эффективные!) функции манипулируют не отдельными точками, а массивами точек – фрагментами изображений и битовыми образами.
Предусмотрены функции переноса содержимого целых областей (прямоугольных) изображений. В простейшем случае они не требуют никаких дополнительных подготовительных действий.
Функции BitBlt, StretchBlt, MaskBlt, PlgBlt.
Форматфункций:
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,
DWORDdwRop
);
Действие функций: перенос прямоугольного фрагмента изображения из контекста-источника в контекст-приемник, в т.ч. с трансформацией и дополнительными операциями (см. ниже). Фрагмент в логической системе координат. StretchBlt() отличается тем, что может изменять масштаб изображения фрагмента. MaskBlt() позволяет задавать маскировать часть изображения. PlgBlt(), кроме того, осуществляет перенос в непрямоугольную область приемника с соответствующим искажением.
Возвращаемое значение: признак успешности выполнения.
Параметры:
hSrcDC, hDstDC – контексты: соответственно источник и получатель данных.
nSrcX, nSrcY, nDstX, nDstY – координаты фрагмента в обоих контекстах.
nSrcWidth, nSrcHeight, nDstWidth, nDstHeight – размеры фрагментов.
hbmMask – битовый образ (см. ниже) маски, монохромного типа, нулевые точки маски указывают на применение к данной точке изображения операции "заднего плана", единичные – "переднего плана".
nMaskX, nMaskY – точка привязки в образе маски.
lpDstVertices – массив структур POINT, задающих вершины параллелограмма, образующего фрагмент-приемник.
dwRop – дополнительная операция, применяемая к фрагменту при переносе: SRCCOPY (простое копирование), SRCAND (комбинация цветов источника и получателя по И), SRCPAINT (комбинация по ИЛИ), SRCINVERT (комбинация по "Исключающему ИЛИ"), SRCERASE (комбинация по И цвета источника и инверсии цвета получателя), NOTSRCCOPY, NOTSRCERASE (соответствует одноименным, но результирующий цвет инвертируется), DSTINVERT (инверсия фрагмента-приемника), BLACKNESS, WHITENESS (заполнение фрагмента-получателя цветом соответственно 0 и 1 физической палитры), и другие. Для MaskBlt() параметр включает операции для переднего и заднего фона, формируется с помощью макроса MAKEROP4.
Для успешного применения этих функций требуется, чтобы оба контекста относились к одному устройству (или идентичным устройствам).
При использовании функций следует учитывать, что в логических координатных системах, связанных с обоими контекстами, отсчитываются только координаты опорных точек и размеры границ фрагмента, содержимое же его всегда ориентировано одинаково.
Эффекты, возникающие при деформации битового образа, дополнительно управляются функцией SetStretchBltMode(). Текущая настойка возвращается функцией GetStretchBltMode().
Битовый образ (bitmap) – двумерный массив числовых значений, характеризующий состояние точек некоторой области, как правило, прямоугольной.
В простейшем случае битовый образ описывается структурой BITMAP, содержащей поля:
LONG bmType – тип образа, должен быть равен 0.
LONG bmWidth, LONG bmHeight – положительные ширина и высота прямоугольной области в пикселах
LONG bmWidthBytes – размер в байтах образа одной строки изображения, в Windows должен быть кратен 2, т.к. система предполагает массив состоящим из слов; фактически кратен 4.
WORD bmPlanes – количество цветовых планов (плоскостей), фактически компонент, задающих цвет.
WORD bmBitsPixel – количество бит для кодирования цвета одной точки.
LPVOID bmBits – указатель на двумерный массив данных, каждая строка которого соответствует одной строке изображения.
Практически используются монохромный и цветной типы образов. В случае монохромного имеет место 1 цветовой план и 1 бит на точку. Единичное значение этого бита задает для точки цвет переднего плана (foreground), нулевое – заднего (backgroung).
С точки зрения GDI битовые образы являются объектами, которые идентифицируются их описателями – HBITMAP. Различают т.н. совместимые и контекстно-независимые объекты BITMAP.
Битовый образ типично создается одной из следующих функций.
ФункцииCreateBitmap, CreateBitmapIndirect
Формат функций:
HBITMAP CreateBitmap(
int nWidth, int nHeight, UINT cPlanes, UINT cBitsPerPel,
const void* lpvBits
);
HBITMAP CreateBitmapIndirect(const BITMAP* lpBitmap);
Действие: создает объект BITMAP с указанными характеристиками.
Возвращаемое значение: описатель объекта или NULL в случае ошибки.
Параметры:
nWidth, nHeight – размеры образа в точках изображения (pel).
cPlanes – количество цветовых планов.
cBitsPerPel – "глубина" цвета и битах на точку.
lpvBits – массив данных образа.
lpBitmap – структура BITMAP, содержащая перечисленные параметры.
ФункцияCreateDIBitmap
Формат функции:
HBITMAPCreateDIBitmap(
);
Действие: создает объект BITMAP контекстно-независимого типа.
Возвращаемое значение: описатель объекта или NULL в случае ошибки.
Параметры:
ФункцияCreateCompatibleBitmap
Формат функции:
HBITMAP CreateCompatibleBitmap(HDC hDC, int nWidth, int nHeight);
Действие: создает объект BITMAP совместимого типа для заданного контекста с заданными размерами. В зависимости от контекста он может быть создан цветным или монохромным, а если в контексте заданы данные раздела DIB – контекстно-независимым.
Возвращаемое значение: описатель объекта или NULL в случае ошибки.
Параметры:
hDC – контекст.
nWidth, nHeight – размеры образа.
"Совместимые" образы наиболее пригодны для временного сохранения и восстановления изображений, тек как манипулирование ими несколько более производительно, чем другими типами образов. Вместе с тем, с этой целью типично использование также "контекстов в памяти", однако с ними совместимы как цветные, так и монохромные, что приводит к неоднозначности выбора.
Для доступа к содержимому битового образа предусмотрены функции SetDlBits() и GetDlBits() (работают построчно). Однако имеется возможность воздействовать на него всеми доступными инструментами. Для этого объект BITMAP связывается с некоторым контекстом с помощью универсальной функции SelectObject(), после чего все изменения в контексте будут отображаться и в битовом образе; наиболее характерным примером является использование контекстов "в памяти", связывать с которыми объект BITMAPнеобходимо. Аналогично для отображения битового образа в контекст он должен быть связан с некоторым контекстом (возможно, с одним и тем же).