MySDK - библиотека классов и функций для облегчения процесса разработки переносимых приложений.
Язык ядра: ANSI C++.
Язык интерфейса: CodeGear C++ Builder 2009.
Содержит следующие разделы (и одноименные пространства имен):
- Math - Математические методы.
- Utilities - Обработка изображений, графика, бинарные деревья, поддержка ini-файлов, и т.п.
- VCapture - Поддержка видеоввода с DirectShow устройств, файлов, запись видео в файл (C++ Builder only).
1. Math
1.1. NCC2D - Двумерная нормированная кросс-корреляция
Класс NCC2D предоставляет средства для вычисления двухмерной нормированной кросс корреляции. Для вычисления используется известная формула нормированной кросс-корреляции:
,
где I(x,y) - входное изображение разрешением NIxMI пикселей,
T(x,y) - шаблон разрешением NTxMT пикселей,
T - среднее шаблона,
I(u,v) - среднее участка входного изображения под шаблоном,
u,v - координаты обхода шаблоном по изображению u=1,(NI-NT+1); v=1,MI-MT+1.
Объявление:
- MCorrelation.h
- MCorrelation.cpp
Зависимости:
- Класс наследуется от UModule.
Специфика класса:
- ANSI C++.
- Класс не использует указателей на внешние данные, т.о. объекты класса полностью независимы от остального кода на всем времени жизни.
- Шаблон и тестовое изображение должны представлять 1D массивы с построчным размещением черно-белых данных. 1 пиксель кодируется 1 байтом градации серого.
Параметры класса:
- int IWidth - Ширина входного изображения.
- int IHeight - Высота входного изображения.
- int TWidth - Ширина шаблона.
- int THeight - Высота шаблона.
- int CStep - Шаг корреляции. Шаг приращения координат u,v.
- bool SubAverageFlag - Флаг разрешения вычитания среднего. Если false, то среднее шаблона и участка изображения под шаблоном в формуле выше принимаются равными 0. Позволяет существенно увеличить скорость расчета.
Данные класса:
- int CWidth,CHeight - Разрешение матрицы корреляций.
- int WorkIX, WorkIY, WorkIWidth, WorkIHeight - Габариты рабочей области во входном изображении.
- int* Template - Нормированный шаблон (без вычитания среднего).
- long long TSumNorm - Суммарная норма шаблона.
- long long TSumAverage - Сумма среднего шаблона.
- unsigned char *Input - Входное изображение в формате градаций серого.
- long long* ISumAverage - Сумма среднего входного изображения для каждого элемента матрицы корреляций.
- double* Result - Результат расчета корреляций для всех u,v.
- double MaxResult,MinResult - Максимум и минимум корреляции.
- int MaxResX,MaxResY,MinResX,MinResY - Координаты результатов расчет x,y в исходном изображении.
Временные переменные:
- int TemplateSize - Длина массива Template.
- int ISumAverageSize - Длина массива ISumAverage.
- int ResultSize - Длина массива Result.
Открытые методы класса (интерфейс пользователя) делятся на следующие группы:
1. Методы управления параметрами
- int GetIWidth(void) const - Возвращает ширину входного изображения.
- int GetIHeight(void) const - Возвращает высоту входного изображения.
- bool SetIRes(int width, int height) - Устанавливает разрешение входного изображения.
- int GetTWidth(void) const - Возвращает ширину шаблона.
- int GetTHeight(void) const - Возвращает высоту шаблона.
- bool SetTRes(int width, int height) - Устанавливает разрешение шаблона.
- int GetCStep(void) const - Возвращает шаг корреляции.
- bool SetCStep(int step) - Устанавливает шаг корреляции.
- bool GetSubAverageFlag(void) const - Возвращает флаг разрешения вычитания среднего.
- bool SetSubAverageFlag(bool value) - Устанавливает флаг разрешения вычитания среднего.
2. Методы доступа к данным
- int GetCWidth(void) const - Возвращает ширину матрицы корреляций.
- int GetCHeight(void) const - Возвращает высоту матрицы корреляций.
- int GetWorkIX(void) const - Возвращает X-координату левого верхнего угла рабочей области во входном изображении.
- int GetWorkIY(void) const - Возвращает Y-координату левого верхнего угла рабочей области во входном изображении.
- int GetWorkIWidth(void) const - Возвращает ширину рабочей области во входном изображении.
- int GetWorkIHeight(void) const - Возвращает высоту области во входном изображении.
- const int* GetTemplate(void) const - Возвращает данные нормированного шаблона (без вычитания среднего).
- bool SetTemplate(const int* buffer, size_t size) - Позволяет внешнее задание готовых данных нормированного шаблона (без вычитания среднего). Данные из буфера ‘buffer' копируются в ‘Template' класса. Если size != TWidth*THeight то метод возвращает false и не делает ничего.
- long long GetTSumNorm(void) const - Возвращает суммарную норма шаблона.
- bool SetTSumNorm(long long value) - Позволяет внешнее задание суммарной нормы шаблона.
- long long GetTSumAverage(void) const - Возвращает сумму среднего шаблона. Среднее вычисляется как сумма/(TWidth*THeight).
- bool SetTSumAverage(long long value) - Позволяет внешнее задание суммы среднего шаблона.
- const unsigned char *GetInput(void) const - Возвращает данные входного изображения (в форме градаций серого).
- long long GetISumAverage(int x, int y) const - Возвращает сумму среднего входного изображения для каждого элемента матрицы корреляций.
- double GetResult(int x, int y) const - Возвращает результат расчета корреляций для заданных u,v.
- double GetMaxResult(void) const - Возвращает максимум корреляции по всей матрице.
- double GetMinResult(void) const - Возвращает минимум корреляции по всей матрице.
- int GetMaxResX(void) const - Возвращает X-координату достижения максимума корреляции в исходном изображении.
- int GetMaxResY(void) const - Возвращает Y-координату достижения максимума корреляции в исходном изображении.
- int GetMinResX(void) const - Возвращает X-координату достижения минимума корреляции в исходном изображении.
- int GetMinResY(void) const - Возвращает Y-координату достижения минимума корреляции в исходном изображении.
3. Методы счета
- void SetTemplate(const unsigned char *buffer) - Устанавливает новое изображение шаблона. Метод осуществляет расчет среднего и нормы для шаблона.
- bool SetInput(unsigned char *input) - Устанавливает входное изображение.
Защищенные методы класса (интерфейс разработчика). Реализация унаследованных от UModule методов:
- virtual bool ADefault(void) - Восстановление настроек по умолчанию и сброс процесса счета: SubAverageFlag=true; CStep=1.
- virtual bool ABuild(void) - Обеспечивает сборку внутренней структуры объекта после настройки параметров (перераспределение памяти для всех массивов данных класса). Автоматически вызывает метод Reset() и выставляет Ready в true в случае успешной сборки.
- virtual bool AReset(void) - Сброс процесса счета. Для данного класса не делает ничего.
- virtual bool ACalculate(void) - Выполняет расчет значений корреляций по заданному шаблону и тестовому изображению.
|
2. Utilities
2.1. Коллекция вспомогательных функций
В библиотеке содержится набор функций для упрощения процесса прямого и обратного преобразования числа в строку, обработки строк, и т.п. Некоторые функции возвращают указатель на внутренний буфер. Значение буфера изменяется при следующем вызове функции библиотеки поэтому не допускается одновременное использование нескольких вызовов таких функций в одном выражении. При необходимости таким функциям необходимо передать ссылку на внешний буфер.
Объявление:
- USupport.h
- USupport.cpp
Зависимости:
- Нет.
Специфика:
- ANSI C++.
- STL.
- Шаблоны.
Функции:
- Преобразование числа в строку с возможностью задания внешнего буфера:
template<typename CharT, typename NumT>
- Преобразование числа в ANSI строку используя внутренний буфер библиотеки:
template<typename NumT>
- Преобразование числа в unicode строку используя внутренний буфер библиотеки:
template<typename NumT>
- Преобразование числа в строку с заданной точностью digs и возможностью задания внешнего буфера:
template<typename CharT, typename NumT>
- Преобразование числа в ANSI строку с заданной точностью digs и используя внутренний буфер библиотеки:
template<typename NumT>
- Преобразование числа в unicode строку с заданной точностью digs и используя внутренний буфер библиотеки:
template<typename NumT>
- Преобразование STL-строки в вещественное число
template<typename CharT>
- Преобразование STL-строки в целое число
template<typename CharT>
- Выделение дробной части числа с точностью digs знаков после запятой
- Разбиение строки ‘str' на составляющие через сепаратор 'sep'. Записывает результат в ‘output' предварительно очищая его. Возвращает число полученных строк.
template<typename CharT>
2.2. UModule
Класс UModule предоставляет интерфейс управления процессом счета. Класс предоставляет средства для автоматического восстановления внутренней структуры объекта и сброса процесса счета в исходное состояние при необходимости.
Объявление:
- UModule.h
- UModule.cpp
Зависимости:
- Нет.
Специфика класса:
- ANSI C++.
Атрибуты класса:
- bool Ready - Флаг готовности объекта к счету. Если false, то перед итерацией счета будет вызван метод Build. Флаг должен быть сброшен в false любым методам класса, который приводит класс в состояние, непригодное к исполнению кода в теле методов Reset, Calculate и вызываемых в них методах. Таким методом является, например метод, изменяющий значение некоторого параметра, являющегося значением размера массива выходных данных.
Открытые методы класса (интерфейс пользователя):
- bool IsReady(void) - Возвращает значение атрибута Ready, характеризующего текущее состояние готовности объекта к счету.
- bool Default(void) - Восстановление настроек по умолчанию и сброс процесса счета. Метод сбрасывает флаг Ready, вызывает метод ADefault, и в случае успешного его выполнения возвращает результат вызова метода Build.
- bool Build(void) - Обеспечивает сборку внутренней структуры объекта после настройки параметров. Переопределяется, в случае, когда структура объекта зависит от значений параметров, например, параметры являются размерами массивов. Немедленно возвращает true если флаг Ready уже true. В противном случае вызывает метод ABuild и в случае успешного его выполнения выставляет флаг Ready в true и возвращает результат вызова метода Reset. В противном случае возвращает false.
- bool Reset(void) - Сброс процесса счета. Переопределяется в случае, когда результат вычисления блока на следующем шаге зависит от предыдущего шага. Если флаг Ready == false метод немедленно возвращает результат вызова метода Build, осуществляя, таким образом, автоматическое восстановление структуры объекта. Иначе возвращает результат вызова метода AReset.
- bool Calculate(void) - Выполняет расчет этого объекта. Переопределяется всегда, содержит собственно код расчетов на заданном шаге. Если флаг Ready == false вызывается метод Build, осуществляя, таким образом, автоматическое восстановление структуры объекта. В случае успешного вызова метода Build или если Ready == true возвращает результат вызова метода ACalculate.
Защищенные методы класса (интерфейс разработчика):
- bool ADefault(void) - Выполняет специфические действия установки значений параметров по умолчанию.
- bool ABuild(void) - Выполняет специфические действия сборки внутренней структуры объекта после настройки параметров.
- bool AReset(void) - Выполняет специфические действия сброса процесса счета.
- bool ACalculate(void) - Выполняет специфические действия по расчету этого объекта.
Все методы возвращают true в случае успешного выполнения.
2.3. UTree
Класс описывает дерево с хранящимися в каждом узле данными типа T: template <class T> class UTree.
Объявление:
- UTree.h
- UTree.cpp
Зависимости:
- Нет.
Специфика класса:
- ANSI C++.
- STL.
- Шаблоны.
Дополнительные типы данных:
- typedef string NameT - Тип имени узла дерева.
- typedef long int IdT - Тип идентификатора.
- typedef vector<IdT> LongIdT - Тип длинного идентификатора.
Статические данные:
- static char Separator - Разделительный символ в длинных именах узлов дерева. По умолчанию разделитель ‘.'.
Параметры:
- IdT Id - Идентификатор узла.
- NameT Name - Имя узла.
Данные:
- T Data - Данные узла.
- UTree<T> *Root - Указатель на корень узла.
- vector<UTree<T>* > SubTree - Список ветвей узла.
- UTree<T> *Current - Указатель на текущий подузел.
Открытые методы класса (интерфейс пользователя) делятся на следующие группы:
1. Конструкторы
- UTree(void) - Конструктор по умолчанию. Создает пустое дерево.
- UTree(const UTree<T> &node) - Конструктор копирования.
2. Методы доступа к статическим данным
- static char GetSeparator(void) - Возвращает символ-разделитель длинного имени.
- static void SetSeparator(char separator) - Устанавливает новый символ-разделитель длинного имени.
3. Методы доступа к параметрам:
- const IdT& GetId(void) const - Возвращает идентификатор узла.
- const string& GetName(void) const - Возвращает имя узла.
- UTree<T>* GetRoot(void) - Возвращает указатель на корень узла.
- size_t GetSubTreeSize(void) - Возвращает число поддеревьев узла.
4. Методы доступа к виртуальным данным узла (вычисляются при обращении):
- void GetSubTrees(vector<NameT> &buffer) - Возвращает список кратких имен ветвей данного узла. Содержимое буфера не очищается.
- void GetSubTrees(vector<IdT> &buffer) - Возвращает список id ветвей данного узла. Содержимое буфера не очищается.
- LongIdT GetFullId(UTree<T> *root) - Возвращает полный id данного узла по указателю на корневой узел 'root'. Если 'root' == 0, то возвращает полное имя, начиная от корня всего дерева. Возвращает пустой id, если root - не является корнем данного узла. Имя узла 'root' не включается.
- string GetFullName(UTree<T> *root) - Возвращает полное имя данного узла по указателю на корневой узел 'root'. Если 'root' == 0, то возвращает полное имя, начиная от корня всего дерева. Возвращает пустую строку, если root - не является корнем данного узла. Имя узла 'root' не включается.
5. Методы настройки параметров:
- bool SetId(const IdT& id) - Устанавливает идентификатор узла.
- bool SetName(const string& name) - Устанавливает имя узла.
- void SetRoot(UTree<T> *root) - Устанавливает указатель на корень узла.
6. Методы управления деревом
- void Clear(void) - Удаляет все узлы.
- bool Add(UTree<T> *node) - Создает новый узел с именем node.Name без сортировки по имени. Добавления не происходит, если узел с данным именем уже существует, или имя добавляемого узла недопустимо. После создания в узел копируются данные из узла tree. Возвращает true в случае успешного создания узла.
- bool AddSorted(UTree<T> *node) - Создает новый узел с именем node.Name с сортировкой по имени. Добавления не происходит, если узел с данным именем уже существует, или имя добавляемого узла недопустимо. После создания в узел копируются данные из узла tree. Возвращает true в случае успешного создания узла.
- bool Del(const string &name) - Удаление узла с именем 'name' вместе со всем его поддеревом
- void Sort(void) - Сортирует ветвь.
7. Операторы сравнения (по имени):
- bool operator == (const UTree<T> &node) const
- bool operator != (const UTree<T> &node) const
- bool operator < (const UTree<T> &node) const
- bool operator > (const UTree<T> &node) const
8. Операторы доступа:
- UTree<T>& operator = (const UTree<T> &node) - Оператор присваивания.
- UTree<T>& operator [] (const string &fullname) - Возвращает ссылку на поддерево с полным именем 'fullname'. Генерирует исключение UTreeExNoNode, если узел не найден.
- UTree<T>& operator [] (const LongIdT &fullid) - Возвращает ссылку на поддерево с полным именем 'fullname'. Генерирует исключение UTreeExNoNode, если узел не найден.
- UTree<T>& operator [] (int index) - Возвращает ссылку на элемент поддерева текущего узла по индексу 'index'. Не проверяет корректность индекса, в случае некорректного значения результат не определен.
- T& operator () (int index) - Возвращает ссылку на данные элемента поддерева текущего узла по индексу 'index'. Не проверяет корректность индекса, в случае некорректного значения результат не определен.
- T& operator () (const LongIdT &fullid) - Возвращает ссылку на данные поддерева с полным id 'fullid'. Генерирует исключение UTreeExNoNode, если узел не найден.
- T& operator () (const string &fullname) - Возвращает ссылку на данные поддерева с полным именем 'fullname'. Генерирует исключение UTreeExNoNode, если узел не найден.
- T& operator ~ (void) - Возвращает ссылку на данные этого узла.
- T& operator () (void) - Возвращает ссылку на данные текущего узла. Если текущий узел не задан, возвращает данные этого узла.
9. Исключения:
- class Exception - Базовый класс исключений.
Параметры исключения:
- UTree<T> *Owner - Указатель на источник исключения.
- class NoFreeMemException: public Exception - Исключение, формируемое при невозможности выделения памяти.
- class NoNodeException: public Exception - Исключение, формируемое при отсутствии запрашиваемого узла.
Параметры исключения:
- string NodeName - Короткое имя отсутствующего узла.
- IdT NodeId - Короткий идентификатор отсутствующего узла.
2.4. URegistry
Класс реестра. Класс описывает дерево с хранящимися в каждом узле данными типа map<string,string> (имя параметра, значение).
Объявление:
- URegistry.h
- URegistry.cpp
Зависимости:
- UTree
Специфика класса:
- ANSI C++.
- STL.
- Шаблоны.
Дополнительные типы данных:
- typedef map<string,string> URegData - Набор <имя, значение> данных узла реестра.
- typedef map<string,string>::iterator URegDataIterator - Итератор по данным узла.
- typedef UTree<URegData> URegistry - Класс реестра.
2.5. UClassRegistry
Класс реестра с разбиением набора данных узла на группы ("классы").
Объявление:
- URegistry.h
- URegistry.cpp
Зависимости:
- UTree
Специфика класса:
- ANSI C++.
- STL.
- Шаблоны.
Дополнительные типы данных:
- typedef map<string,URegData > UClassRegData - Множественный набор <имя класса, <имя,значение>> данных узла реестра.
- typedef map<string,URegData>::iterator UClassRegDataIterator - Итератор по данным узла.
- typedef UTree<UClassRegData> UClassRegistry - Класс реестра.
2.6. UQueue
Реализация очереди с кешированием в массиве. Не является STL-производным контейнером. Размер очереди динамически меняется по исчерпании внутреннего буфера. Работает быстрее std::queue.
Объявление:
- UQueue.h
- UQueue.cpp
Зависимости:
- Нет.
Специфика класса:
- ANSI C++.
- STL.
- Шаблоны.
Данные класса:
- vector<Ty> m_pData - Элементы очереди.
- unsigned int Size - Число данных в очереди.
- unsigned int MaxSize - Максимально доступный размер очереди.
- unsigned int Front - Индекс первого элемента.
- unsigned int Back - Индекс последнего элемента.
Общедоступные методы:
1. Конструкторы:
- UQueue(void) - Создает пустую очередь.
- UQueue(size_t size) - Создает очередь с резервированым максимальным размером.
- UQueue(const std::vector<Ty>& vec) - Создает очередь заполненную данными из вектора vec.
2. Методы доступа к данным
- Ty& front(void) - Возвращает первый элемент.
- Ty& back(void) - Возвращает последний элемент.
- Ty& operator [] (int i) - Оператор доступа к элементам по индексу. Индекс считается от начала очереди.
- bool empty(void) - Возвращает true если очередь пуста.
- size_t size(void) - Возвращает число элементов данных в очереди.
3. Методы управления данными
- void push(const Ty& obj) - Добавляет элемент в конец.
- void pop(void) - Извлекает элемент из начала.
- void clear(void) - Очищает очередь.
- void reserve(size_t size_) - Резервирует место для size_ элементов.
- void FromVec(const std::vector<Ty>& vec) - Заполняет очередь данными из вектора vec. 0-й элемент вектора становится началом очереди.
2.7. Сериализация в двоичный массив
Представляет собой набор операторов << и >> перегруженных для добавления и извлечения данных простых типов и STL контейнеров из очереди байтов. Сериализация реализована в пространстве имен Utilities::ser.
Объявление:
- USerialize.h
- USerialize.cpp
Зависимости:
- UQueue.
Специфика:
- ANSI C++.
- STL.
- Шаблоны.
Дополнительные типы данных:
- typedef UQueue<unsigned char> USerStorage - Класс-хранилище данных сериализации.
Функции:
- Сохранение значения переменной простого типа в хранилище:
template<typename T>
USerStorage& USimpleToStorage (USerStorage& storage, const T data)
- Восстановление значения переменной простого типа из хранилища:
template<typename T>
USerStorage& USimpleFromStorage (USerStorage& storage, T &data)
- Конечная реализация ввода-вывода для каждого простого типа T:
USerStorage& operator << (USerStorage& storage, T data);
USerStorage& operator >> (USerStorage& storage, T &data);
где T - bool, char, int, и т.д.
- Ввод-вывод пар:
template<typename T1, typename T2>
USerStorage& operator << (USerStorage& storage, const std::pair<T1,T2> &data)
template<typename T1, typename T2>
USerStorage& operator >> (USerStorage& storage, std::pair<T1,T2> &data)
- Ассоциативных массивов:
template<typename T1, typename T2>
USerStorage& operator << (USerStorage& storage, const std::map<T1,T2> &data)
template<typename T1, typename T2>
USerStorage& operator >> (USerStorage& storage, std::map<T1,T2> &data)
- Списков:
template<typename T>
USerStorage& operator << (USerStorage& storage, const std::list<T> &data)
template<typename T>
USerStorage& operator >> (USerStorage& storage, std::list<T> &data)
- Векторов:
template<typename T>
USerStorage& operator << (USerStorage& storage, const std::vector<T> &data)
template<typename T>
USerStorage& operator >> (USerStorage& storage, std::vector<T> &data)
- Строк:
USerStorage& operator << (USerStorage& storage, const std::string &data);
USerStorage& operator >> (USerStorage& storage, std::string &data);
- Деревьев:
template<typename T>
USerStorage& operator << (USerStorage& storage, const UTree<T> &data)
template<typename T>
USerStorage& operator >> (USerStorage& storage, UTree<T> &data)
2.8. Расширение потокового ввода-вывода на STL контейнеры
Представляет собой набор операторов потокового ввода-вывода перегруженных для добавления и извлечения данных простых типов и STL контейнеров. Реализовано в пространстве имен Utilities::Uio. Разработано для простого способа текстовой сериализации контейнеров в строковые потоки для создания интерфейса пользователя. В качестве разделителя между элементами контейнера в потоке используется ‘,'.
Объявление:
- UIOStream.h
- UIOStream.cpp
Зависимости:
- Нет.
Специфика:
- ANSI C++.
- STL.
- Шаблоны.
Функции сериализации:
- Пары. обозначение в потоке значение,значение:
template<typename CharT, typename T1, typename T2>
std::basic_ostream<CharT>& operator << (std::basic_ostream<CharT>& stream, const std::pair<T1,T2> &data)
template<typename CharT, typename T1, typename T2>
std::basic_istream<CharT>& operator >> (std::basic_istream<CharT>& stream, std::pair<T1,T2> &data)
- Вектора.
template<typename CharT, typename T>
std::basic_ostream<CharT>& operator << (std::basic_ostream<CharT>& stream, const std::vector<T> &data)
template<typename CharT, typename T>
std::basic_istream<CharT>& operator >> (std::basic_istream<CharT>& stream, std::vector<T> &data)
- Строки
template<typename CharT>
std::basic_ostream<CharT>& operator << (std::basic_ostream<CharT>& stream, const std::basic_string<ChatT> &data)
template<typename CharT>
std::basic_istream<CharT>& operator >> (std::basic_istream<CharT>& stream, std::basic_string<ChatT> &data)
2.9. UIniFile
Класс поддержки Ini-файлов.
Класс поддерживает однострочные комментарии вида: <//текст комментария> (угловые скобки не являются частью синтаксиса комментария). Допускается замена последовательности "//" на любую другую, не содержащую символов [ ] " =. Длина последовательности ограничена реализацией типа StringT. Комментарии могут начинаться с начала новой строки или с любого места строки данных. Начало комментария не распознается, если находится в участке строки, ограниченном двойными кавычками " или квадратными скобками [].
Методы класса игнорируют ошибки в синтаксисе ini-файлов.
Объявление:
- UIniFile.h
- UIniFile.cpp
Зависимости:
- Нет.
Специфика:
- ANSI C++.
- STL.
- Шаблоны.
Дополнительные типы данных:
- typedef basic_string<CharT> StringT - тип строки.
- typedef list<StringT> StringListT - тип списка строк (тип хранилища данных ini-файла).
- typedef typename list<StringT>::iterator StringListIteratorT - тип итератора по списку строк.
Служебные константы:
- StringT NoCommentSymbols - Символы запрещенные в комментариях. [ ] = \n \r пробел.
- StringT NoNameSymbols - Символы, запрещенные в имени секции или переменной. [ ] = \n \r
Параметры:
- StringT SComment - Последовательность, определяющая начало комментария.
Данные:
- StringListT Lines - список строк ini-файла.
Общедоступные методы:
1. Методы управления
- bool Check(const StringT §ion) - Возвращает true если секция section существует.
- bool Check(const StringT §ion, const StringT &variable) - Возвращает true если переменная 'variable' секции 'section' существует.
- bool GetSectionList(vector<StringT> &buffer) - Возвращает массив имен секций.
- bool GetVariableList(const StringT §ion, vector<StringT> &buffer) - Возвращает массив имен переменных секции 'section'.
- bool GetSectionLines(const StringT §ion, vector<StringT> &buffer) - Возвращает массив строк секции 'section'.
- const list<StringT>& GetLines(void) - Возвращает список строк ini-файла.
- bool CheckName(const StringT &name) - Проверяет строку на допустимость в качестве имени секции или переменной.
- bool Add(const StringT §ion) - Создает новую пустую секцию 'section'. Если имя уже существует то возвращает true и не делает ничего. Если имя недопустимо то возвращает false.
- bool Add(const StringT §ion, const StringT &variable, const StringT &value) - Создает новую переменную 'variable' в секции 'section'. Если имя уже существует то записывает новое значение value. Если имя недопустимо то возвращает false. Если секции не существует то она создается.
- bool Rename(const StringT §ion, const StringT &newsection) - Переименовывыает секцию 'section' в новое имя 'newsection'.
- bool Rename(const StringT §ion, const StringT &variable, const StringT &newvariable) - Переименовывыает переменную 'variable' секции 'section' в новое имя 'newvariable'.
- bool Delete(void) - Очищает ini-файл.
- bool Delete(const StringT §ion) - Удаляет секцию 'section'.
- bool Delete(const StringT §ion, const StringT &variable) - Удаляет переменную 'variable' секции 'section'.
- bool LoadFromFile(const StringT &FileName) - Прочесть файл с диска. Метод не делает ничего, если FileName == "".
- bool SaveToFile(const StringT &FileName) - Обновить файл на диске. Метод не делает ничего, если FileName == "".
2. Перегруженные операторы
- UIniFile& operator = (const UIniFile &inifile) - Оператор присваивания. Метод не воздействует на FileName и SearchErrorStringT. Метод не делает ничего, если FileName == "".
- StringT operator () (const StringT §ion, const StringT &variable, const CharT *def=0) - Возвращает значение переменной variable секции section. Если секции и/или переменной не существует, то возвращается строка 'default'.
- bool operator () (const StringT §ion, const StringT &variable, const StringT &value) - Устанавливает значение переменной variable секции section в значение value. Если секции и/или переменной не существует, то они создаются. Метод не делает ничего, если FileName == "".
Скрытые методы:
- StringListIteratorT FindSection(const StringT §ion) - Метод поиска строки описания секции 'section'. Возвращает итератор на найденную строку или end.
- bool FindSection(const StringT §ion, StringT* &result, int &start, int &stop) - Метод поиска строки описания секции 'section'. Метод возвращает true если секция найдена. Дополнительная возвращаемая информация: result - ссылка на найденную строку; start - начало имени секции (после открывающей '['); stop - конец имени секции (перед закрывающей ']').
- StringListIteratorT FindVariable(const StringT §ion, const StringT &variable) - Метод поиска строки описания переменной 'variable' секции 'section'. Метод возвращает итератор на найденную строку или end.
- bool FindVariable(const StringT §ion, const StringT &variable, StringT* &result, int &startname, int &stopname, int &startvalue) - Метод поиска строки описания переменной 'variable' секции 'section'. Метод возвращает true если переменная найдена. Дополнительная возвращаемая информация: result - ссылка на найденную строку; startname - начало имени переменной (после открывающих пробелов); stopname - конец имени переменной (перед '=' или завершающими имя пробелами); startvalue - начало значения переменной (после '=' и открывающих пробелов).
- bool DecodeAsComment(const StringT &str, int &start) - Пытается декодировать строку 'str' как комментарий. В случае успеха возвращает true и начало комментария 'start' (после открывающих пробелов).
- bool DecodeAsSection(const StringT &str, int &start, int &stop) - Пытается декодировать строку 'str' как секцию. В случае успеха возвращает true и start - начало имени секции (после открывающей '['); stop - конец имени секции (перед закрывающей ']').
- bool DecodeAsVariable(const StringT &str, int &startname, int &stopname, int &startvalue) - Пытается декодировать строку 'str' как переменную. В случае успеха возвращает true и startname - начало имени переменной (после открывающих пробелов); stopname - конец имени переменной (перед '=' или завершающими имя пробелами); startvalue - начало значения переменной (после '=' и открывающих пробелов).
2.10. Свойства
2.10.1. UIProperty - интерфейс сериализации
Класс сериализации свойств.
Объявление:
- UProperty.h
- UProperty.cpp
Зависимости:
- Utilities::ser
- Utilities::Uio
Специфика:
- ANSI C++.
- STL.
- Шаблоны.
Общедоступные методы:
- virtual string GetOwnerName(void) const=0 - Возвращает строковое имя класса-владельца свойства как typeid(Owner).name().
- virtual bool Save(ser::USerStorage &storage)=0 - Записывает значение свойства в конец хранилища.
- virtual ostream& Save(ostream &stream)=0 - Записывает значение свойства в поток.
- virtual bool Load(ser::USerStorage &storage)=0 - Читает значение свойства из начала хранилища.
- virtual istream& Load(istream &stream)=0 - Читает значение свойства из потока.
2.10.2. UVProperty - виртуальное свойство
Класс UVProperty - не содержит физических данных внутри себя. Применяется как интерфейс чтения/записи некоторого состояния объекта.
Объявляется как:
template<typename T,typename OwnerT>
class UVProperty: public UIProperty
где T - тип данных, которыми манипулирует свойство;
OwnerT - тип класса владельца экземпляра свойства.
Объявление:
- UProperty.h
- UProperty.cpp
Зависимости:
- Utilities::ser
- Utilities::Uio
- UIProperty
Специфика:
- ANSI C++.
- STL.
- Шаблоны.
Дополнительные объявления:
- typedef T (OwnerT::*GetterT)(void) const - Тип метода чтения данных свойства.
- typedef bool (OwnerT::*SetterT)(T) - Тип метода записи данных свойства с аргументом значением.
- typedef bool (OwnerT::*SetterRT)(const T&) - Тип метода записи данных свойства с аргументом-ссылкой.
Данные:
- OwnerT* Owner - Экземпляр класса - владельца свойства.
- GetterT Getter - Метод чтения данных свойства.
- SetterT Setter - Метод записи данных свойства с аргументом значением.
- SetterRT SetterR - Метод записи данных свойства с аргументом-ссылкой.
Общедоступные методы:
1. Конструкторы
- UVProperty(OwnerT * const owner, SetterT setmethod , GetterT getmethod) - случай для метода записи данных с аргументом значением.
- UVProperty(OwnerT * const owner, SetterRT setmethod , GetterT getmethod) - случай для метода записи данных с аргументом ссылкой.
2. Методы управления
- void Init(OwnerT * const owner, SetterT setmethod, GetterT getmethod) - случай для метода записи данных с аргументом значением.
- void Init(OwnerT * const owner, SetterRT setmethod, GetterT getmethod) - случай для метода записи данных с аргументом ссылкой.
- const T Get(void) - Возврат значения без проверки наличия функции и владельца.
- bool Set(T value) - Установка значения без проверки наличия функции и владельца.
- bool Set(const T &value) - Аналогично методу выше, но с аргументом ссылкой.
2. Операторы. Все операторы проверяют наличие указателя на требуемую функцию, и указателя на владельца.
- T operator () (void) - Возврат значения.
- operator T (void) const - Приведение типа.
- UVProperty& operator = (const T &value) - Присваивание значения типа хранимого данного.
- UVProperty& operator = (const UVProperty &v) - Присваивание значения типа свойства.
2.10.3. UProperty - базовое свойство
Класс UProperty - содержит переменную типа T. Применяется как альтернативный способ задания параметров некоторого класса. Предлагает более эффективный подход к вводу/выводу данных из свойства. Позволяет не задавать методы ввода вывода, если не требуется дополнительная обработка данных в классе-владельце.
Объявляется как:
template<typename T,typename OwnerT>
class UProperty: public UVProperty<T,OwnerT>
где T - тип данных, которыми манипулирует свойство;
OwnerT - тип класса владельца экземпляра свойства.
Объявление:
- UProperty.h
- UProperty.cpp
Зависимости:
- Utilities::ser
- Utilities::Uio
- UVProperty
Специфика:
- ANSI C++.
- STL.
- Шаблоны.
Данные:
- T v - экземпляр переменной свойства.
Общедоступные методы:
1. Конструкторы
- UProperty(OwnerT * const owner, UVProperty<T,OwnerT>::SetterT setmethod=0) - Дополнительный конструктор, позволяющий не задавать оба метода чтения и записи.
- UProperty(OwnerT * const owner, UVProperty<T,OwnerT>::SetterRT setmethod) - Конструктор, позволяющий не задавать метод чтения, и определяющий метод записи с аргументом ссылкой.
2. Операторы доступа:
- const T& operator () (void) const - Возврат значения.
- operator T (void) const - Приведение типа.
- UProperty& operator = (const T &value) - Присваивание значения типа хранимого данного.
- UProperty& operator = (const UProperty &value) - Присваивание значения типа свойства.
- T* operator -> (void) - Возвращает указатель на данное.
- T& operator * (void) - Возвращает ссылку на данное.
3. Дополнительно в классе представлены операторы следующих типов:
- Арифметические операторы с присваиванием
T& operator += (const T &value)
- Битовые операции с присваиванием
T& operator |= (const T &value)
- Сдвиговые операции с присваиванием
T& operator <<= (int value)
- Операции инкремента
operator ++ (void)
- Унарные операторы
T operator ! (void)
- Операторы сравнения
bool operator == (const T& v2) const
bool operator == (const UProperty<T,OwnerT>& v2) const
Все эти операторы транслируют соответствующие вызовы оператора для переменной класса. Аргументом операторов является переменная типа T. Для операторов сравнения дополнительно перегружены варианты с аргументом типа UProperty<T,OwnerT>.
4. В пространстве имен Utilities также определены глобальные операторы следующих классов:
- Обратные операторы сравнения
template<typename T,typename OwnerT>
bool operator == (T &v1, const UProperty<T,OwnerT>& v2)
- Обратные арифметические операторы с присваиванием
template<typename T,typename OwnerT>
T& operator += (T &v1, const UProperty<T,OwnerT>& v2)
- Разнотиповые операторы сравнения
template<typename T1, typename T2, typename OwnerT1, typename OwnerT2>
bool operator == (UProperty<T1,OwnerT1>& v1, const UProperty<T2,OwnerT2>& v2)
- Разнотиповые арифметические операторы с присваиванием
template<typename T1, typename T2, typename OwnerT1, typename OwnerT2>
T1& operator += (UProperty<T1,OwnerT1>& v1, const UProperty<T2,OwnerT2>& v2)
- Бинарные арифметические операции
template<typename T,typename OwnerT>
T operator + (const T &v1, const UProperty<T,OwnerT>& v2)
- Бинарные битовые операции
template<typename T,typename OwnerT>
T operator & (const T &v1, const UProperty<T,OwnerT>& v2)
- Разнотипные бинарные арифметические операции
template<typename T1, typename T2, typename OwnerT>
T1 operator + (const T1 &v1, const UProperty<T2,OwnerT>& v2)
- Разнотипные бинарные арифметические операции с различными классами-владельцами свойств.
template<typename T,typename OwnerT1, typename OwnerT2>
T operator + (UProperty<T,OwnerT1>& v1, const UProperty<T,OwnerT2>& v2)
2.10.4. UCProperty - свойство-контейнер
Класс UCProperty - содержит переменную типа TC являющуюся STL контейнером. Применяется как альтернативный способ задания параметров некоторого класса. Предлагает более эффективный подход к вводу/выводу данных из свойства. Позволяет не задавать методы ввода вывода, если не требуется дополнительная обработка данных в классе-владельце.
Свойство не защищает элементы контейнера от несанкционированного изменения минуя методы доступа.
Объявляется как:
template<typename TC, typename OwnerT>
class UCProperty: public UVProperty<TC,OwnerT>
где TC - тип контейнера;
OwnerT - тип класса владельца экземпляра свойства.
Объявление:
- UProperty.h
- UProperty.cpp
Зависимости:
- Utilities::ser
- Utilities::Uio
- UVProperty
Специфика:
- ANSI C++.
- STL.
- Шаблоны.
Дополнительные типы данных:
- typedef typename TC::value_type TV - тип элемента контейнера.
Данные:
- TC v - экземпляр контейнера свойства.
Общедоступные методы:
1. Конструкторы
- UCProperty(OwnerT * const owner, UVProperty<TC, OwnerT>:: SetterT setmethod=0) - Дополнительный конструктор, позволяющий не задавать оба метода чтения и записи.
- UCProperty(OwnerT * const owner, UVProperty<TC,OwnerT>:: SetterRT setmethod) - Конструктор, позволяющий не задавать метод чтения, и определяющий метод записи с аргументом ссылкой.
2. Операторы доступа:
- const TC& operator () (void) const - Возврат контейнера по ссылке.
- TV& operator [] (int i) - Возврат значения элемента контейнера.
- UCProperty& operator = (const TC &value) - Присваивание значения типа хранимого контейнера.
- UCProperty& operator = (const UCProperty &value) - Присваивание значения типа свойства.
- TC* operator -> (void) - Возвращает указатель на контейнер.
- TC& operator * (void) - Возвращает ссылку на контейнер.
2.11. Обработка изображений
2.11.1. Union UColorT - тип данных пикселя
Объявление:
- UBitmap.h
- UBitmap.cpp
Зависимости:
- Нет.
Специфика:
- ANSI C++.
Данные объединения:
- unsigned int c - Целое, ч/б для вычислений формата 000C.
- struct { unsigned char b,g,r,d; } - 32,24 бит RGB.
Методы:
1. Конструкторы
- UColorT(void) - По умолчанию. Устанавливает c=0.
- UColorT(unsigned color) - Инициализирует пиксель значением color.
- UColorT(unsigned char rr, unsigned char gg, unsigned char bb, unsigned char dd=0) - Покомпонентная инициализация пикселя.
2. Операторы
- UColorT operator = (const UColorT &color) - Присваивание.
- UColorT operator = (const unsigned color)
- bool operator == (const UColorT color) - Сравнение на равенство.
- bool operator != (const UColorT color) - Сравнение на неравенство.
2.11.2. UBitmap
Представляет собой класс работы с изображениями. Предлагает методы изменения масштаба, отражения, инверсии, контрастирования, вычисления гистограмм и т.п. А также алгоритмы бинаризации, выделения контуров, фильтрации, детекции движения.
Вводится понятие цветовой модели (ColorModel), которая описывает способ хранения данных пикселей UColorT в изображении. Возможны следующие варианты:
- ubmColor: каждый пиксель в компонентах b,g,r - хранит синюю, зеленую и красную компоненты RGB-цвета. Компонента d - не используется.
- ubmGray: каждый пиксель в компонентах b,g,r - хранит 8-битное черно-белое значение яркости. Компонента d - не используется.
- ubmMath: каждый пиксель в компоненте ‘c' хранит значение яркости в диапазоне [0,0xFFFFFFFF]. Соответственно в b,g,r,d - располагается разложение этого представления на байты. Этот режим используется для проведения вычислений, требующих большой точности.
Все методы класса функционируют со всеми цветовыми моделями, если не указано обратное.
Объявление:
- UBitmap.h
- UBitmap.cpp
Зависимости:
- UColorT
Специфика:
- ANSI C++.
Дополнительные объявления:
- typedef enum {ubmColor=1, ubmGray=2, ubmMath=3} UBMColorModel - Цветовая модель изображения (цветное, черно/белое, для вычислений).
- typedef enum {ubmUp=1, ubmDown=2, ubmLeft=3, ubmRight=4} UBMShiftDirection - Направление смещения изображения методом Move.
- typedef enum {ubmConst=1, ubmLinear=2, ubmNolinear=3} UBMResizeMethod - Тип алгоритма изменения размера изображения.
- typedef enum {ubmNative=1, ubmSobel=2} UBMLoopingMethod - Тип алгоритма выделения контуров.
Параметры:
- int Width - Ширина изображения.
- int Height - Высота изображения.
- UBMColorModel ColorModel - Цветовая модель.
- bool AutoCModelConvert - Флаг автоматического преобразования информации из источника в цветовую модель приемника. По умолчанию true. Состояние по умолчанию расходует дополнительное время на преобразование.
Данные:
- UColorT *Data - Значения пикселей.
- int Length - Число элементов изображения.
Методы:
1. Конструкторы
- UBitmap(void) - Создает пустое изображение 0 размера.
- UBitmap(const UBitmap &bitmap) - Конструктор копирования.
- UBitmap(UBMColorModel cmodel) - Создает пустое изображение и устанавливает указанную цветовую модель.
- UBitmap(int width, int height, UColorT color=0, UBMColorModel cmodel=ubmColor) - Создает изображение разрешением [width,height], с заливкой цветом ‘color' и цветовой моделью ‘cmodel'.
- UBitmap(int width, int height, const unsigned* data, UBMColorModel cmodel=ubmColor) - Создает изображение разрешением [width,height], заполняя данными из ‘data' и цветовой моделью ‘cmodel'. Предполагает, что данные в ‘data' требуемой цветовой модели.
2. Методы управления параметрами
- inline int GetWidth(void) const - Возвращает размер изображения по оси X
- inline int GetHeight(void) const - Возвращает размер изображения по оси Y
- inline UBMColorModel GetColorModel(void) const - Возвращает цветовую модель.
- inline bool GetAutoCModelConvert(void) const - Возвращает состояние флага автоматического преобразования цветовой модели.
- void SetColorModel(UBMColorModel cmodel, bool isupdate=true) - Задает глубину цвета изображения. Если isupdate == true то существующее изображение преобразуется.
- void SetAutoCModelConvert(bool acmodel) - Задает режим преобразования цветовой модели приемника результатов обработки 'target' во всех методах. Если true - то target сохраняет свою цветовую модель, если false - target принимает цветовую модель источника.
- void SetRes(int width, int height) - Задает новые размеры изображения и создает внутренний буфер.
3. Методы управления данными
- inline UColorT* GetData(void) const - Возвращает указатель на внутренний буфер.
- inline int GetLength(void) const - Возвращает длину изображения в пикселях.
- void SetImage(const UColorT* data) - Копирует новое изображение из буфера data с прежними размерами.
- void SetImage(int width, int height, const UColorT* data) - Копирует новое изображение из буфера data с новыми размерами.
- void SetPImage(UColorT* data) - Устанавливает внутренний указатель на буфер data сохраняя прежнюю информацию о размерах.
- void SetPImage(int width, int height, UColorT* data) - Устанавливает внутренний указатель на буфер data обновляя информацию о размерах.
- void Fill(UColorT color) - Заполняет изображение цветом color
- void CopyTo(int x, int y, UBitmap &target) - Копирует изображение в 'target' в позицию, начинающуюся как x,y. Если изображение не вмещается целиком, то оно усекается. Изображение всегда преобразуется в цветовую модель цели 'target'.
- void CopyTo(int x, int y, UBitmap &target, UColorT transp) const - Копирует изображение в 'target' в позицию, начинающуюся как x,y. Если изображение не вмещается целиком, то оно усекается. Изображение всегда преобразуется в цветовую модель цели 'target'. Элементы изображения источника с цветом 'transp' не переносятся (эффект прозрачности).
- bool GetRect(int x, int y, UBitmap &target) const - Возвращает участок изображения с координатами левого верхнего угла x,y и шириной и длиной соответствующей размерам 'target'.
- void Separate(UBitmap &red, UBitmap &green, UBitmap &blue, UBMColorModel cmodel=ubmMath) - Разделяет текущее изображение на RGB цветовые каналы. Каналы формируются в соответствии с цветовой моделью 'cmodel'. Цветовая модель изображения предполагается ubmColor
4. Методы сбора статистики
- void FindColorRange(UColorT &minval, UColorT &maxval) - Возвращает минимальное и максимальное значение яркостей
- UColorT FindAverageColor(int x=0, int y=0, int width=-1,int height=-1) - Вычисляет средневзвешенную сумму яркостей всех пикслей участка изображения. Если 'width' или 'height' < 0 или превышает максимум то размеры участка вычисляются до конца изображения
- unsigned int CalcBrightnessByRow(int y) - Вычисляет суммарную яркость по строке изображения с номером y
- unsigned int CalcBrightnessByCol(int x) - Вычисляет суммарную яркость по столбцу изображения с номером x
- void UBitmap::Histogram(unsigned *x_result, unsigned *y_result, int x1=-1, int x2=-1, int y1=-1, int y2=-1) - Вычисляет суммарную яркость раздельно по столбцам и строками изображения от столбца x1 до x2, и от строки y1 до y2. В x_result значения столбцов, в y_result - строк, память должна быть выделена
- void UBitmap::Histogram(UColorT *x_result, UColorT *y_result, int x1=-1, int x2=-1, int y1=-1, int y2=-1) - Вычисляет относительную суммарную интенсивность раздельно по столбцам и строками изображения от столбца x1 до x2, и от строки y1 до y2. Интенсивность считается раздельно по каналам в зависимости от цветовой модели. В x_result значения столбцов, в y_result - строк, память должна быть выделена.
5. Методы обработки изображения
- void UBitmap::ReflectionX(UBitmap *target=0) - Отражение по вертикали. Если 'target' != 0 то результат операции сохраняется в него и цветовая модель 'target' замещается моделью источника.
- void UBitmap::ReflectionY(UBitmap *target=0) - Отражение по горизонтали. Если 'target' != 0 то результат операции сохраняется в него и цветовая модель 'target' замещается моделью источника.
- void Move(int pixels, int direction, UColorT color=0, UBitmap *target=0) - Сдвигает изображение в требуемую сторону на 'pixels' пикселей. Направление определяется 'direction': 1 - Up; 2 - Down; 3 - Left; 4 - Right. При иных значениях 'direction' или отрицательных значениях pixels метод не делает ничего. Пустое место заполняется цветом 'color'. Если 'target' != 0 то результат операции сохраняется в него и цветовая модель 'target' замещается моделью источника.
- void MoveXY(int x, int y, UColorT color=0, UBitmap *target=0) - Сдвигает изображение на 'x' пикселей по оси абсцисс и на 'y' пикселей по оси ординат положительные значения вызывают сдвиг вправо и вниз отрицательные - влево и вверх. Пустое место заполняется цветом 'color'. Если 'target' != 0 то результат операции сохраняется в него и цветовая модель 'target' замещается моделью источника.
- void ResizeCanvas(int top, int left, int right, int bottom, UColorT color=0, UBitmap *target=0) - Изменяет размер канвы, сохраняя нетронутым изображение. Если изображение не помещается целиком в новую канву, то оно усекается. Свободное место заполняется цветом 'color'. Если 'target' != 0 то результат операции сохраняется в него и цветовая модель 'target' замещается моделью источника.
- void Resize(int width, int height, UBMResizeMethod resizemethod= ubmNolinear, UBitmap *target=0) - Изменяет размер изображения с линейной интерполяцией. Если 'target' != 0 то результат операции сохраняется в него.
- void InsertHorLine(int y, int thickness, UColorT color=0, UBitmap *target=0) - Вставляет горизонтальную полосу толщиной 'thickness' начиная с позиции с верхней y-координатой. Полоса заполняется цветом 'color'.
- void RemoveHorLine(int y, int thickness, UBitmap *target=0) - Удаляет горизонтальную полосу толщиной 'thickness' начиная с позиции с верхней y-координатой.
- void InsertVertLine(int x, int thickness, UColorT color=0, UBitmap *target=0) - Вставляет вертикальную полосу толщиной 'thickness' начиная с позиции с левой x-координатой. Полоса заполняется цветом 'color'.
- void RemoveVertLine(int x, int thickness, UBitmap *target=0) - Удаляет вертикальную полосу толщиной 'thickness' начиная с позиции с левой x-координатой.
- void Contrasting(UBitmap *target=0) - Контрастирование. Производит пересчёт значений яркости в масштаб 0 - 255. Запись результата производится в target.
- void Contrasting(UColorT minb, UColorT maxb, UBitmap *target=0) - Контрастирование. Производит пересчёт значений яркости в масштаб minb - maxb. Если 'target' != 0 то результат операции сохраняется в него.
- void Looping(UBitmap *target, UBMLoopingMethod method=ubmSobel) - Выделение контуров. Запись результата производится в target.
- void Binarization(UColorT threshold, UColorT minval, UColorT maxval, UBitmap *target=0) - Производит бинаризацию изображения с порогом threshold. Если 'target' != 0 то результат операции сохраняется в него. Пиксели с яркостями ниже порога устанавливаются равными 'minval'. Пиксели с яркостями выше порога устанавливаются равными 'maxval'.
- void Binarization(UColorT minval, UColorT maxval, UBitmap *target=0) - Производит автоматическую бинаризацию изображения по порогу, представляющему собой средневзвешенную яркость изображения. Если 'target' != 0 то результат операции сохраняется в него. Пиксели с яркостями ниже порога устанавливаются равными 'minval'. Пиксели с яркостями выше порога устанавливаются равными 'maxval'.
- void MaskFiltering(int mask, UBitmap *target) const - Осуществляет фильтрацию изображение методом усреднения по маске размером 'masksize' Если размер маски задан четным, то он округляется до ближайшего большего нечетного. Фильтрованное изображение сохраняется в target. Если 'target' == 0 то не делает ничего.
- void Inverse(UBitmap *target=0) - Инвертирует изображение. Если 'target' != 0 то результат операции сохраняется в него. Для всех цветовых моделей база устанавливается == 255 т.о. модель ubmMath необходимо нормировать в [0:255] перед инверсией.
- bool DifferenceFrame(const UBitmap *deduction, UBitmap *target=0) - Осуществляет построение разностного кадра. Если 'target' != 0 то результат операции сохраняется в него.
6. Перегруженные операторы
- UBitmap& operator = (const UBitmap &bitmap) - Оператор присваивания. Цветовая модель приемника замещается моделью источника.
- inline unsigned& operator [] (int index) const - Возвращает значение пикселя в виде целого. Рассматривает изображение как строковый 1D-массив.
- inline UColorT& operator () (int index) const - Возвращает значение пикселя в виде UColorT. Рассматривает изображение как строковый 1D-массив.
- inline UColorT& operator () (int ix, int iy) const - Возвращает значение пикселя в виде UColorT. Рассматривает изображение как 2D-массив.
Скрытые методы.
1. Методы изменения размера изображения
- bool ResizeConst(UColorT *output, UColorT* input, int oWidth, int oHeight, int nWidth, int nHeight) - Изменение размера изображения с константной интерполяцией.
- bool ResizeLinear(UColorT *output, UColorT* input, int oWidth, int oHeight, int nWidth, int nHeight) - Изменение размера изображения с линейной интерполяцией.
- bool ResizeNolinear(UColorT *output, UColorT* input, int oWidth, int oHeight, int nWidth, int nHeight) - Изменение размера изображения с нелинейной интерполяцией.
2. Методы выделения контуров
- void NativeLooping(UBitmap *target) - Оригинальный алгоритм.
- void SobelLooping(UBitmap *target) - Фильтр Собеля.
2.11.3. Поддержка UBitmap в CodeGear C++ Builder
Предоставляется поддержка ввода/вывода изображений типа UBitmap в класс Graphics::TBitmap библиотеки VCL.
Объявление:
- TUBitmap.h
- TUBitmap.cpp
Зависимости:
- UBitmap
Специфика:
- CodeGear C++ Builder
Операторы:
- void operator >> (UBitmap &source, Graphics::TBitmap *target) - Отправляет данные объекта UBitmap в TBitmap
- void operator << (UBitmap &target, Graphics::TBitmap *source) - Отправляет данные объекта TBitmap в UBitmap
Функции:
- bool LoadBitmapFromFile(String FileName, UBitmap *target) - Загружает изображение из файла с именем FileName. Метод использует создание временной переменной Graphics::TBitmap и производит загрузку изображения через него с последующей отправкой данных в ‘target'.
- bool SaveBitmapToFile(String FileName, UBitmap *target) - Сохраняет изображение в файл с именем FileName. Метод использует создание временной переменной Graphics::TBitmap и производит сохранение изображения через него.
2.12. Графика
2.12.1. UAGraphics - Интерфейс графических примитивов
Объявление:
- UAGraphics.h
- UAGraphics.cpp
Зависимости:
- UBitmap
Специфика:
- ANSI C++
- STL
Атрибуты инструментов рисования:
- UColorT PenColor - Цвет пера.
- int PenWidth - Толщина пера.
- int PenX, PenY - Координаты пера.
Временные переменные:
- UColorT *CData - Прямой указатель на данные канвы рисования.
- int CWidth, CHeight - Разрешение канвы рисования.
- int HalfPenWidth - Половина толщины пера.
Общедоступные методы.
1. Методы доступа к атрибутам инструментов рисования
- const UColorT& GetPenColor(void) const - Возвращает цвет пера.
- const int GetPenWidth(void) const - Возвращает толщину пера.
- const int GetPenX(void) const - Возвращает X координату пера.
- const int GetPenY(void) const - Возвращает Y координату пера.
- void SetPenColor(UColorT &color) - Устанавливает цвет пера.
- bool SetPenWidth(int width) - Устанавливает толщину пера.
- void SetPenPos(int x, int y) - Позиционирует перо в точку x,y.
2. Графические примитивы
- virtual void Pixel(int x, int y, bool ispos=true)=0 - Отображает пиксель если ispos == true позиционирует перо в заданную позицию.
- virtual void Line(int x1, int y1, int x2, int y2)=0 - Отображает линию по координатам концов
- virtual void LineTo(int x, int y)=0 - Отображает линию относительно позиции пера. Перемещает перо в позицию x,y.
- virtual void Circle(int x, int y, int r, bool fill=false)=0 - Отображает окружность с центром x,y и радиусом r. Если fill == true - то рисуем с заливкой.
- virtual void Sector(int x, int y, int r, int fi, int teta, bool fill=false)=0 - Отображает круговой сектор с центром x,y и радиусом r. Раствор сектора fi, повернут на угол teta против часовой стрелки от горизонтальной оси углы задаются в градусах.
- virtual void Ellipse(int x, int y, int hor, int vert, bool fill=false)=0 - Отображает эллипс с центром x,y и радиусами hor, vert. Если fill == true - то рисуем с заливкой.
- virtual void Rect(int x1, int y1, int x2, int y2, bool fill=false)=0 - Отображает прямоугольник с координатами x1,y1 - верхнего левого угла; x2,y2 - правого нижнего угла. Если fill == true - то рисуем с заливкой.
- virtual void Triangle(int x1, int y1, int x2, int y2, int x3, int y3, bool fill=false)=0 - Отображает прямоугольник с координатами вершин с заливкой цветом color. Если fill == true - то рисуем с заливкой.
- virtual void Fill(int x, int y, UColorT BorderColor)=0 - Простейшая заливка произвольной области
3. Вывод текста
- virtual bool SetFont(const string &fontname, bool isbold=false, bool isitalic=false, bool isunder=false)=0 - Устанавливает текущим новый шрифт.
- virtual void TextOut(const string &str, int x, int y, int size, UColorT Color)=0 - Выводит текст str высотой в size пикселей.
Скрытые методы.
1. Вспомогательные графические примитивы
- virtual void DrawPixel(int x, int y)=0 - Отрисовывает пиксель в координатах x,y без проверок.
2.12.2. UGraphics - графика в ANSI C++
Предоставляет реализацию методов UAGraphics для рисования. Не использует ничего кроме стандарта С++.
Объявление:
- UGraphics.h
- UGraphics.cpp
Зависимости:
- UBitmap
- UAGraphics
Специфика:
- ANSI C++
- STL
Данные:
- UBitmap* Canvas - Канва рисования.
Общедоступные методы:
1. Конструкторы
- UGraphics(UBitmap *canvas) - Устанавливает канву для рисования в виде указателя на экземпляр UBitmap. Создание и уничтожение экземпляра канвы лежит на программисте.
2. Методы доступа к данным
- UBitmap* GetCanvas(void) - Возвращает текущую канву рисования.
- bool SetCanvas(UBitmap *canvas) - Задает новую канву рисования. Создание и уничтожение экземпляра канвы лежит на программисте.
3. Операторы
- UGraphics& operator = (UGraphics &tool) - Оператор присваивания.
Также реализует все методы описанные в UAGraphics.
3. VCapture
3.1. VTimeStamp - отметки времени
Класс описывает момент времени и предоставляет средства выполнения арифметических операций и операций ввода/вывода описания в строки для интерфейса с пользователем.
Объявление:
- VTimeStamp.h
- VTimeStamp.cpp
Зависимости:
- Utilities
Специфика:
- ANSI C++.
- STL.
Данные:
- int Hours - Час.
- unsigned char Minutes - Минута.
- unsigned char Seconds - Секунда.
- unsigned char Frames - Кадр в секунде.
- double FPS - Частота кадров потока.
Общедоступные методы.
1. Конструкторы
- VTimeStamp(void) - Конструктор по умолчанию
- VTimeStamp(const VTimeStamp ©) - Конструктор копирования.
- VTimeStamp(double seconds, double fps) - Устанавливает состояние класса по заданному времени в секундах.
- VTimeStamp(long frames, double fps) - устанавливает состояние класса по заданному времени в количестве кадров.
2. Операторы
- VTimeStamp& operator = (const VTimeStamp ©) - Оператор присваивания другой отметки времени.
- VTimeStamp& operator = (double seconds) - оператор декодирования времени в секундах в отметку.
- double operator()(void) const - Оператор преобразования отметки времени в секунды.
- bool operator == (const VTimeStamp ©) - Операторы сравнения;
- bool operator != (const VTimeStamp ©);
- bool operator < (const VTimeStamp ©);
- bool operator > (const VTimeStamp ©).
- VTimeStamp& operator -= (const VTimeStamp ©) - Вычитает из этой отметки отметку ‘copy'.
- VTimeStamp& operator -= (double seconds) - Вычитает из этой отметки число секунд ‘seconds'.
- VTimeStamp& operator += (const VTimeStamp ©) - Прибавляет к этой отметке отметку ‘copy'.
- VTimeStamp& operator += (double seconds) - Прибавляет к этой отметке число секунд ‘seconds'.
- string& operator >> (string &str) const - Оператор вывода в строку. Разделитель ':'.
- VTimeStamp& operator << (const string &str) - Оператор ввода из строки. Разделитель ':'.
- friend VTimeStamp operator - (const VTimeStamp ©1, const VTimeStamp ©2) - Вычисляет разность между двумя отметками времени.
- friend VTimeStamp operator - (const VTimeStamp ©,double seconds) - Вычисляет разность между отметкой времени и временем в секундах.
- friend VTimeStamp operator - (double seconds,const VTimeStamp ©) - Вычисляет разность между временем в секундах и отметкой времени.
- friend VTimeStamp operator + (const VTimeStamp ©1, const VTimeStamp ©2) - Вычисляет сумму между двумя отметками времени.
- friend VTimeStamp operator + (const VTimeStamp ©,double seconds) - Вычисляет сумму между отметкой времени и временем в секундах.
- friend VTimeStamp operator + (double seconds,const VTimeStamp ©) - Вычисляет сумму между временем в секундах и отметкой времени.
3.2. VACapture - базовый класс видео захвата
Базовый класс видео захвата. Предоставляет общие данные и методы управления процессом захвата видео.
Для использования производных классов необходимо включить в стартовом файле проекта следующий код:
|
Объявление:
- VACapture.h
- VACapture.cpp
Зависимости:
- VTimeStamp
- strmiids.lib
Специфика:
- CodeGear C++ Builder
- DirectShow
- STL
Параметры видео:
- int Width, Height - Ширина и высота.
- int BitsPerPixel - Бит на пиксель.
- double FPS - FPS.
Данные захвата:
- unsigned char* Bitmap - Данные кадра.
- long BitmapSize - Размер кадра в байтах.
- double CurrentVideoTime - Время текущего кадра.
Данные вывода:
- HWND WinHandle - Дескриптор окна, в которое будет отображаться захватываемое видео.
- int WinWidth, WinHeight - Ширина и высота окна отображения.
- int WinX, WinY - Координаты начала окна отображения.
- int DeinterlaceFlag - Флаг включения деинтерлейса: 0 - Отключен (по умолчанию); 1 - Дублировать нечетные поля; 2 - Дублировать четные поля.
Внутренние данные:
- TComInterface<IGraphBuilder> *pGraphBuilder - Графопостроитель.
- ICaptureGraphBuilder2* pGraphBuilder2 - Вспомогательный настройщик графа захвата.
- TComInterface<IMediaControl> *pMediaControl - Управление потоками в графе.
- TComInterface<IVideoWindow> *pVideoWindow - Управление окном захвата видео.
- ICustomGrabber *pCustomGrabber - объект записи кадра в область памяти.
- TComInterface<IBaseFilter> *pGrabFilter - Фильтр, с которого будем захватывать кадры.
- TComInterface<IBaseFilter> *pRenderFilter - Фильтр - рендерер.
- TComInterface<ISampleGrabber> *pGrabber - Граббер для фильтра pGrabFilter.
Временные переменные:
- bool ReadyState - Переменная отражающая готовность устройства к захвату.
- HDC hDC - Контекст устройства отображения.
Общедоступные методы.
1. Методы доступа к параметрам видео
- int GetWidth(void) const - Возвращает ширину изображения.
- int GetHeight(void) const - Возвращает высоту изображения.
- int GetBitsPerPixel(void) const - Возвращает число бит на пиксель.
- double GetFPS(void) const - Возвращает число FPS.
2. Методы доступа к данным захвата
- unsigned char* GetBitmap(void) const - Возвращает данные кадра. Началу данных пикселей в некоторых реализациях может предшествовать служебная информация.
- long GetBitmapSize(void) const - Возвращает размер кадра в байтах.
- virtual unsigned char* GetPixels(void) const - Возвращает массив пикселей кадра.
- long GetPixelsSize(void) const - Возвращает размер массива пикселей кадра.
- virtual double GetCurrentVideoTime(void) const - Возвращает время текущего кадра.
- virtual long long GetCurrentVideoFrame(void) const - Возвращает номер текущего кадра.
3. Методы доступа к данным отображения
- HWND GetWinHandle(void) const - Возвращает дескриптор окна.
- bool SetWinHandle(HWND winhandle) - Устанавливает дескриптор окна.
- int GetWinWidth(void) const - Возвращает ширину окна отображения.
- int GetWinHeight(void) const - Возвращает высоту окна отображения.
- int GetWinX(void) const - Возвращает X-координату начала окна отображения.
- int GetWinY(void) const - Возвращает Y-координату начала окна отображения.
- bool SetWinWidth(int width) - Устанавливает ширину окна отображения.
- bool SetWinHeight(int height) - Устанавливает высоту окна отображения.
- bool SetWinX(int x) - Устанавливает X-координату начала окна отображения.
- bool SetWinY(int y) - Устанавливает Y-координату начала окна отображения.
- int GetDeinterlaceFlag(void) const - Возвращает состояние флага включения деинтерлейса.
- bool SetDeinterlaceFlag(int flag) - Устанавливает режим деинтерлейса.
4. Методы управления (некоторые методы реализуются в производных классах)
- bool Open(void) - Открывает захват видео и готовит рендеринг.
- bool Close(void) - Закрывает захват видео.
- virtual bool WinUpdate(void)=0 - Обновляет окно отображения.
- bool GetReadyState(void) - Возвращает true в случае готовности устройства к захвату.
5. Методы видеозахвата (реализуются в производных классах)
- virtual bool Start(void)=0 - Включает режим захвата.
- virtual bool Pause(void)=0 - Приостанавливает режим захвата.
- virtual bool Stop(void)=0 - Выключает режим захвата.
Скрытые методы управления (реализуются в производных классах):
- virtual bool AOpen(void)=0 - Фактические действия по открытию видеозахвата. Метод обязан инициализировать корректным числом BitmapSize.
- virtual bool AClose(void)=0 - Фактические действия по закрытию видеозахвата
- virtual HRESULT BuildCaptureGraph(void)=0 - Построение графа захвата видео с возможностью работы с отдельными кадрами.
3.3. VDCapture - захват видео с DirectShow устройств
Класс захвата видео с физических устройств.
Объявление:
- VDCapture.h
- VDCapture.cpp
Зависимости:
- VTimeStamp
- VACapture
Специфика:
- CodeGear C++ Builder
- DirectShow
- STL
Дополнительные объявления:
- extern string VideoCrossbarsNameList[] - Перечень возможных crossbar: "None", "Tuner", "Composite", "SVideo", "RGB", "YRYBY", "SerialDigital", "ParallelDigital", "SCSI", "AUX", "1394", "USB", "VideoDecoder", "VideoEncoder", "SCART", "Black".
Данные:
- vector<wstring> CaptureDevicesList - Список устройств захвата.
- map<int, VIDEOINFOHEADER> CaptureModesList - Список доступных режимов захвата.
- map<int, VIDEOINFOHEADER> UserModesList - Список пользовательских режимов.
- vector<long> CrossbarInputsList - Список Crossbars.
- int ActiveDevice - Номер выбранного устройства захвата.
- int ActiveMode - Номер выбранного режима захвата.
- int ActiveCrossbarInput - Номер выбранного видеовыхода. Если -1 (по умолчанию) то берется текущий.
Внутренние данные:
- bool CameraControlEnabled, VideoControlEnabled - Индикаторы доступности пользовательского управления настройками камеры и видео захвата.
Временные переменные:
- bool CaptureState - Состояние захвата: true - захват включен; false - захват отключен.
- double StartVideoTime - Время начала видеозахвата, в секундах.
Общедоступные методы.
1. Методы видеозахвата
- vector<wstring>& GetCaptureDevicesList(void) - Возвращает список доступных устройств захвата.
- vector<long>& GetCrossbarInputsList(void) - Возвращает список crossbars.
- int GetActiveDevice(void) - Возвращает активное устройство захвата.
- bool SetActiveDevice(int index) - Выбирает устройство захвата по индексу
- bool SetActiveDevice(const wstring &name) - Выбирает устройство захвата по имени устройства.
- map<int,VIDEOINFOHEADER>& GetCaptureModesList(void) - Возвращает список доступных режимов захвата.
- int GetModeWidth(int mode=-1) - Возвращает ширину видео для заданного режима. Если mode == -1 то возвращает параметры активного режима.
- int GetModeHeight(int mode=-1) - Возвращает высоту видео для заданного режима. Если mode == -1 то возвращает параметры активного режима.
- int GetModeBPP(int mode=-1) - Возвращает число бит на пиксель для заданного режима. Если mode == -1 то возвращает параметры активного режима.
- int GetActiveMode(void) - Возвращает активный режим захвата.
- bool SetActiveMode(int mode) - Устанавливает активный режим захвата.
- int GetActiveCrossbarInput(void) - Возвращает активный видеовход.
- bool SetActiveCrossbarInput(int input) - Устанавливает новый видеовход.
- map<int,VIDEOINFOHEADER>& GetUserModesList(void) - Возвращает список пользовательских режимов.
- void DefaultUserModes(void) - Устанавливает список пользовательских режимов по умолчанию.
- bool AddUserMode(int width, int height, int bpp, int number=-1) - Добавляет новый пользовательский режим.
- bool DelUserMode(int number) - Удаляет пользовательский режим
- bool GetCaptureState(void) - Возвращает текущее состояние захвата.
2. Методы управления данными
- bool WinUpdate(void) - Обновляет окно отображения.
3. Методы прямого управления видеозахватом
- HRESULT GetVideoPropertyRange(long Property, long *pMin, long *pMax, long *pSteppingDelta, long *pDefault, long *pCapsFlags) - Возвращает диапазон и умолчания для заданного параметра 'Property'.
- HRESULT GetVideoProperty(long Property, long *lValue, long *Flags) - Возвращает значение заданного параметра 'Property'.
- HRESULT SetVideoProperty(long Property, long lValue, long Flags) - Устанавливает значение заданного параметра 'Property'.
4. Методы прямого управления устройством
- HRESULT GetCameraPropertyRange(long Property, long *pMin, long *pMax, long *pSteppingDelta, long *pDefault, long *pCapsFlags) - Возвращает диапазон и умолчания для заданного параметра 'Property'.
- HRESULT GetCameraProperty(long Property, long *lValue, long *Flags) - Возвращает значение заданного параметра 'Property'.
- HRESULT SetCameraProperty(long Property, long lValue, long Flags) - Устанавливает значение заданного параметра 'Property'.
Скрытые методы.
1. Вспомогательные методы захвата
- HRESULT GetWDMCaptureDrivers(void) - Получение списка устройств захвата видео на WDM-драйверах
- HRESULT GetCaptureFilter(int N,IBaseFilter* *ppCaptureFilter) - Построение фильтра захвата.
Дополнительно в классе реализованы абстрактные методы VACapture.
3.4. VFCapture - захват из видео файла
Класс чтения видео из файлов.
Объявление:
- VFCapture.h
- VFCapture.cpp
Зависимости:
- VTimeStamp
- VACapture
Специфика:
- CodeGear C++ Builder
- DirectShow
- STL
Параметры видео:
- wstring FileName - Имя файла.
- int NumFrames - Число кадров.
- double Length - Длина в секундах.
- long long Duration - Длина в кадрах.
Общедоступные методы.
1. Методы доступа к параметрам видео
- int GetNumFrames(void) const - Число кадров.
- const wstring& GetFileName(void) const - Имя файла.
- double GetLength(void) const - Длина в секундах.
2. Методы доступа к данным захвата
- BITMAPINFO* GetBitmapHeader(void) const - Данные заголовка BMP.
- long GetBitmapHeaderSize(void) const - Размер заголовка BMP.
3. Методы управления
- bool SetFileName(const wstring &filename) - Выбирает новый файл для захвата.
- bool SelectFrame(long long index) - Считывает кадр по заданному номеру.
- bool SelectFrame(double time) - Считывает кадр в заданное время (в секундах).
- bool NextFrame(void) - Считывает следующий кадр.
Дополнительно в классе реализованы абстрактные методы VACapture.
3.5. VAviCreator -Запись кадров в видео файл
Класс создания видео файла из последовательности кадров.
Объявление:
- VAviCreator.h
- VAviCreator.cpp
Зависимости:
- Нет
Специфика:
- DirectShow
- STL
Параметры видео:
- int Width, Height - Ширина и высота видео.
- int BitsPerPixel - Бит на пиксель.
- double FPS - FPS.
- unsigned long Codec - Кодек.
- unsigned int Quality - Качество сжатия.
- string FileName - Имя файла приемника.
Временные переменные:
- bool ReadyState - Переменная отражающая готовность устройства к записи.
Общедоступные методы.
1. Методы доступа к параметрам видео
- int GetWidth(void) const - Возвращает ширину изображения.
- bool SetWidth(int width) - Устанавливает ширину изображения.
- int GetHeight(void) const - Возвращает высоту изображения.
- bool SetHeight(int height) - Устанавливает высоту изображения.
- int GetBitsPerPixel(void) const - Возвращает число бит на пиксель.
- double GetFPS(void) const - Возвращает число FPS.
- bool SetFPS(double fps) - Устанавливает число FPS.
- unsigned long GetCodec(void) const - Возвращает выбранный Кодек.
- bool SetCodec(unsigned long codec) - Устанавливает Кодек.
- unsigned int GetQuality(void) const - Возвращает текущее качество сжатия.
- bool SetQuality(unsigned int quality) - Устанавливает текущее качество сжатия.
- const string& GetFileName(void) const - Возвращает имя файла приемника.
- bool SetFileName(const string &filename) - Устанавливает имя файла приемника.
- void SetAudioFormat(const tWAVEFORMATEX *fmt) - Устанавливает формат аудио.
2. Методы управления
- bool Open(void) - Открывает видеозахват и готовит рендеринг.
- bool Close(void) - Закрывает видеозахват.
- bool GetReadyState(void) - Переменная отражающая готовность устройства к захвату.
- bool WriteFrameBottomUpBGR(const unsigned char *buffer) - Записывает один кадр BGR данных в порядке строк "снизу-вверх". Автоматически начинает новый .AVI файл когда текущий превышает 1.8Gb. Отдельные файлы нумеруются. Возвращает true при успешной записи.
- bool WriteFrame(const unsigned char *buffer,unsigned int linePitch) - Записывает один кадр BGRA данных (D3D и OGL непосредственно поддерживают этот режим). В остальном аналогична методу WriteFrameBottomUpBGR. linePitch - представляет собой расстояние между строками в байтах.
- bool WriteAudioFrame(const void *buffer, int samples) - Пишет порцию аудио-данных. Необходимо обеспечить достаточное число аудио на кадр иначе файл будет плохо воспроизведиться. Размер буфера в образцах, а не байтах. Если не взывать этот метод, то аудио поток в конечном файле создан не будет. Первым желательно сделать вызов метода WriteFrame, а затем WriteAudioFrame (в противном случае синхронизация видео и аудио будет нарушена). Возвращает true в случае успеха.
3.6. Взаимодействие UBitmap и VCapture
Предоставляется поддержка ввода/вывода изображений типа UBitmap в классы видео захвата и записи.
Объявление:
VUSupport.h
- VUSupport.cpp
Зависимости:
- UBitmap
- VACapture
- VAviCreator
Специфика:
- CodeGear C++ Builder
- DirectShow
Операторы:
- UBitmap& operator << (UBitmap &bmp, const VACapture &capture) - Оператор загрузки данных из объекта видеозахвата в UBitmap. Объект видеозахвата передается по ссылке.
- UBitmap& operator << (UBitmap &bmp, const VACapture *capture) - Оператор загрузки данных из объекта видеозахвата в UBitmap. Объект видеозахвата передается по указателю.
- bool operator >> (const UBitmap &bmp, VAviCreator &avi) - Оператор отправки данных кадра в объект видеозаписи. Объект видеозаписи передается по ссылке.
- bool operator >> (const UBitmap &bmp, VAviCreator *avi) - Оператор отправки данных кадра в объект видеозаписи. Объект видеозаписи передается по указателю.






