AI Lab

Open Artificial Intelligence Laboratory

Русский (Russian Federation)English (United Kingdom)
Разработки MySDK MySDK

MySDK

E-mail Печать PDF
Оценка пользователей: / 2
ПлохоОтлично 

mysdk 

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

Язык ядра: ANSI C++.

Язык интерфейса: CodeGear C++ Builder 2009.

 

  Содержит следующие разделы (и одноименные пространства имен):

  • Math - Математические методы.
  • Utilities - Обработка изображений, графика, бинарные деревья, поддержка ini-файлов, и т.п.
  • VCapture - Поддержка видеоввода с DirectShow устройств, файлов, запись видео в файл (C++ Builder only).

1. Math

1.1. NCC2D  - Двумерная нормированная кросс-корреляция

Класс NCC2D предоставляет средства для вычисления двухмерной нормированной кросс корреляции. Для вычисления используется известная формула нормированной кросс-корреляции:

formula1_1

 

где    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) - Выполняет расчет значений корреляций по заданному шаблону и тестовому изображению.
Пример использования класса:

// Создание экземпляра класса

NCC2D    Correlator;

 

// Инициализация экземпляра класса

Correlator.SetIRes(w,h);

Correlator.SetTRes(tw,th);

Correlator.SetCStep(1);

Correlator.SetSubAverageFlag(false);

Correlator.SetTemplate(template_image);

 

// Расчет

Correlator.SetImage(test_image);

Correlator.Calculate();

 

// Получение результатов

double   res=Correlator.GetMaxResult();

int      x=Correlator.GetMaxResX();

int      y= Correlator.GetMaxResY();

 

 

 

 

2. Utilities

2.1. Коллекция вспомогательных функций

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

 

Объявление:

  • USupport.h
  • USupport.cpp

 

Зависимости:

  • Нет.

 

Специфика:

  • ANSI C++.
  • STL.
  • Шаблоны.

 

Функции:

  • Преобразование числа в строку с возможностью задания внешнего буфера:

template<typename CharT, typename NumT>

 

basic_string<CharT>& ntoa(NumT n, basic_string<CharT> &buf)

 

  • Преобразование числа в ANSI строку используя внутренний буфер библиотеки:

template<typename NumT>

 

string& sntoa(NumT n)

 

  • Преобразование числа в unicode строку используя внутренний буфер библиотеки:

template<typename NumT>

 

wstring& wntoa(NumT n)

 

  • Преобразование числа в строку с заданной точностью digs и возможностью задания внешнего буфера:

template<typename CharT, typename NumT>

 

basic_string<CharT>& ntoa(NumT n, int digs, basic_string<CharT> &buf)

 

  • Преобразование числа в ANSI строку с заданной точностью digs и используя внутренний буфер библиотеки:

template<typename NumT>

 

string& sntoa(NumT n,int digs)

 

  • Преобразование числа в unicode строку с заданной точностью digs и используя внутренний буфер библиотеки:

template<typename NumT>

 

wstring& wntoa(NumT n,int digs)

 

  • Преобразование STL-строки в вещественное число

template<typename CharT>

 

double atof(const std::basic_string<CharT> &str)

 

  • Преобразование STL-строки в целое число

template<typename CharT>

 

int atoi(const std::basic_string<CharT> &str)

 

  • Выделение дробной части числа с точностью digs знаков после запятой

 

int fraction(double d, int digs).

 

 

  • Разбиение строки ‘str' на составляющие через сепаратор 'sep'. Записывает результат в ‘output' предварительно очищая его. Возвращает число полученных строк.

template<typename CharT>

 

int separatestring(const basic_string<CharT> &str, vector<basic_string<CharT>  > &output, CharT sep, int num=0, int *lastpos=0).

 

 

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 &section) - Возвращает true если секция section существует.
  • bool Check(const StringT &section, const StringT &variable) - Возвращает true если переменная 'variable' секции 'section' существует.
  • bool GetSectionList(vector<StringT> &buffer) - Возвращает массив имен секций.
  • bool GetVariableList(const StringT &section, vector<StringT> &buffer) - Возвращает массив имен переменных секции 'section'.
  • bool GetSectionLines(const StringT &section, vector<StringT> &buffer) - Возвращает массив строк секции 'section'.
  • const list<StringT>& GetLines(void) - Возвращает список строк ini-файла.
  • bool CheckName(const StringT &name) - Проверяет строку на допустимость в качестве имени секции или переменной.
  • bool Add(const StringT &section) - Создает новую пустую секцию 'section'. Если имя уже существует то возвращает true и не делает ничего. Если имя недопустимо то возвращает false.
  • bool Add(const StringT &section, const StringT &variable, const StringT &value) - Создает новую переменную 'variable' в секции 'section'. Если имя уже существует то записывает новое значение value. Если имя недопустимо то возвращает false. Если секции не существует то она создается.
  • bool Rename(const StringT &section, const StringT &newsection) - Переименовывыает секцию 'section' в новое имя 'newsection'.
  • bool Rename(const StringT &section, const StringT &variable, const StringT &newvariable) - Переименовывыает переменную 'variable' секции 'section' в новое имя 'newvariable'.
  • bool Delete(void) - Очищает ini-файл.
  • bool Delete(const StringT &section) - Удаляет секцию 'section'.
  • bool Delete(const StringT &section, 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 &section, const StringT &variable, const CharT *def=0) - Возвращает значение переменной variable секции section. Если секции и/или переменной не существует, то возвращается строка 'default'.
  • bool operator () (const StringT &section, const StringT &variable, const StringT &value) - Устанавливает значение переменной variable секции section в значение value. Если секции и/или переменной не существует, то они создаются. Метод не делает ничего, если FileName == "".

 

Скрытые методы:

  • StringListIteratorT FindSection(const StringT &section) - Метод поиска строки описания секции 'section'. Возвращает итератор на найденную строку или end.
  • bool FindSection(const StringT &section, StringT* &result, int &start, int &stop) - Метод поиска строки описания секции 'section'. Метод возвращает true если секция найдена. Дополнительная возвращаемая информация: result - ссылка на найденную строку; start - начало имени секции (после открывающей '['); stop - конец имени секции (перед закрывающей ']').
  • StringListIteratorT FindVariable(const StringT &section, const StringT &variable) - Метод поиска строки описания переменной 'variable' секции 'section'. Метод возвращает итератор на найденную строку или end.
  • bool FindVariable(const StringT &section, 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 &copy) - Конструктор копирования.
  • VTimeStamp(double seconds, double fps) - Устанавливает состояние класса по заданному времени в секундах.
  • VTimeStamp(long frames, double fps) - устанавливает состояние класса по заданному времени в количестве кадров.

   

2.     Операторы

  • VTimeStamp& operator = (const VTimeStamp &copy) - Оператор присваивания другой отметки времени.
  • VTimeStamp& operator = (double seconds) - оператор декодирования времени в секундах в отметку.
  • double operator()(void) const - Оператор преобразования отметки времени в секунды.
  • bool operator == (const VTimeStamp &copy) - Операторы сравнения;
  • bool operator != (const VTimeStamp &copy);
  • bool operator < (const VTimeStamp &copy);
  • bool operator > (const VTimeStamp &copy).

 

  • VTimeStamp& operator -= (const VTimeStamp &copy) - Вычитает из этой отметки отметку ‘copy'.
  • VTimeStamp& operator -= (double seconds) - Вычитает из этой отметки число секунд ‘seconds'.
  • VTimeStamp& operator += (const VTimeStamp &copy) - Прибавляет к этой отметке отметку ‘copy'.
  • VTimeStamp& operator += (double seconds) - Прибавляет к этой отметке число секунд ‘seconds'.

 

  • string& operator >> (string &str) const - Оператор вывода в строку. Разделитель ':'.
  • VTimeStamp& operator << (const string &str) - Оператор ввода из строки. Разделитель ':'.

 

  • friend VTimeStamp operator - (const VTimeStamp &copy1, const VTimeStamp &copy2) - Вычисляет разность между двумя отметками времени.
  • friend VTimeStamp operator - (const VTimeStamp &copy,double seconds) - Вычисляет разность между отметкой времени и временем в секундах.
  • friend VTimeStamp operator - (double seconds,const VTimeStamp &copy) - Вычисляет разность между временем в секундах и отметкой времени.
  • friend VTimeStamp operator + (const VTimeStamp &copy1, const VTimeStamp &copy2) - Вычисляет сумму между двумя отметками времени.
  • friend VTimeStamp operator + (const VTimeStamp &copy,double seconds) - Вычисляет сумму между отметкой времени и временем в секундах.
  • friend VTimeStamp operator + (double seconds,const VTimeStamp &copy) - Вычисляет сумму между временем в секундах и отметкой времени.

 

 

 

3.2. VACapture - базовый класс видео захвата

Базовый класс видео захвата. Предоставляет общие данные и методы управления процессом захвата видео.

Для использования производных классов необходимо включить в стартовом файле проекта следующий код:

#include <utilcls.h>

// ...

try

{

 Application->Initialize();

 CoInitialize(NULL); // Инициализация

 // ...

 Application->Run();

 CoUninitialize(); // Деинициализация

}

 
А также добавить в проект библиотеку strmiids.lib.

 

Объявление:

  • 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) - Оператор отправки данных кадра в объект видеозаписи. Объект видеозаписи передается по указателю.

 

Обсудить на форуме (0 комментариев).

Сейчас на сайте: [1 пользователь] [137 гостей]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

RuWeb.net - гибкий хостинг

RuWeb.net - гибкий хостинг