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

В некоторых случаях эта информация о формате определяется внешними стандартами, такими как стандарт RS-170/NTSC. В других случаях поставщики устройств определяют множество различных форматов, описанных в документации, поставляемой вместе с устройством. Составители адаптеров решают, какой из этих поддерживаемых форматов они хотят сделать доступным для пользователей своего адаптера в своих getAvailHW() функция, описанная в разделе Хранение информации о формате.
В этом разделе описывается, как указать информацию о формате в адаптере после использования виртуальных функций класса адаптера.
Размеры данных изображения, выводимых устройством, определяются с помощью следующих виртуальных функций.
getMaxHeight() - возвращает целое число, указывающее максимальную высоту данных изображения.
getMaxWidth() - возвращает целое число, указывающее максимальную ширину данных изображения.
getNumberOfBands() - возвращает целое число, указывающее количество измерений в данных. Например, форматы RGB используют три полосы.
Обработчик вызывает эти функции в адаптере, чтобы получить информацию о разрешении, которая отображается в VideoResolution свойство объекта ввода видео.
vid = videoinput('mydeviceimaq');
get(vid,'VideoResolution')
ans =
640 480
Адаптер также вызывает эти функции при создании IAdaptorFrame объект для приема данных изображения. Дополнительные сведения см. в разделе Реализация функции потока сбора данных.
getMaxHeight(), getMaxWidth(), и getNumberOfBands() функции в адаптере обычно выполняют следующую обработку:
Определите формат, заданный пользователем при создании объекта ввода видео. Механизм передает эту информацию в качестве аргумента адаптеру createInstance() функция.
На основе выбранного формата возвращает соответствующие значения высоты, ширины или количества областей данных. Ваш адаптер может сделать это многими способами. Одним из способов, иллюстрируемых демонстрационным адаптером, является определение этих значений в вашем getAvailHW() и сохранить информацию в данных приложения в IDeviceFormat object - см. Определение классов для хранения специфичной для устройства информации. Затем, getMaxHeight(), getMaxWidth(), и getNumberOfBands() функции могут извлекать эти данные приложения и считывать эти значения.
Следующие реализации getMaxHeight() и getMaxWidth() функции определяют значение на основе формата, заданного пользователем. Количество полос зависит от цвета или монохромности формата. Для цветовых форматов, таких как RGB и YUV, количество полос всегда равно 3. Для монохромных (чёрно-белых) форматов количество полос всегда равно 1. Программное обеспечение Image Acquisition Toolbox™ поддерживает только данные изображения с 1 или 3 полосами.
Замените реализацию заглушки в примере адаптера на следующий файл кода C++, mydevice.cpp, созданный в главе 3. Значения соответствуют именам форматов, указанным в примере «Указание устройства» и «Информация о формате».
int MyDeviceAdaptor::getMaxHeight() const{
if(strcmp(_formatName,"RS170"){
return 480;
} else {
return 576;
}
int MyDeviceAdaptor::getMaxWidth() const {
if(strcmp(_formatName,"RS170"){
return 640;
} else {
return 768;
}
}
int MyDeviceAdaptor::getNumberOfBands() const {
return 1;
}
Помимо размеров кадра изображения, необходимо предоставить подсистеме информацию о байтовой компоновке данных изображения. Компоновка байтов включает в себя количество битов, используемых для представления значений пикселей, независимо от того, подписаны данные или не подписаны, полноту данных и то, посылает ли устройство первую нижнюю строку.
Чтобы указать эту информацию, необходимо выбрать одну из FRAMETYPE перечисления, определенные набором адаптеров. Набор адаптеров определяет перечисления для множества различных типов кадров для представления широкого спектра форматов, поддерживаемых устройствами. Например, если устройство является монохромным (черно-белым) устройством, которое возвращает 8-битные данные, можно выбрать MONO8 тип кадра. Если устройство представляет собой цветное устройство, которое возвращает 24-разрядные данные, можно выбрать RGB24 тип кадра. В следующей таблице представлены доступные типы кадров. Чтобы выбрать конкретный формат, просмотрите список в справочной документации по API набора адаптеров для приобретения изображений или откройте AdaptorFrameTypes.h файл.
Формат | Типы рамок |
|---|---|
Монохром | 8-, 10-, 12- и 16-битные форматы; как little-endian, так и big-endian; в обычном формате и в формате флипа. (В форматах отката устройство сначала поставляет итоговую строку.) |
| Подписанные 16- и 32-разрядные форматы; как little-endian, так и big-endian; в обычном формате и в формате флипа. |
| Форматы с плавающей и двойной запятой; форматы little-endian и big-endian; в обычном формате и в формате флипа. |
Цвет | форматы RGB 8-, 24-, 32- и 48 бит; как little-endian, так и big-endian; регулярные и обратные; упакованные и плоские (см. Общие сведения о упакованных и плоских форматах). |
| Типы кадров, указывающие порядок байтов цветовых данных (RGB или GBR) и местоположение пустого байта (XRGB или XGBR). |
| Форматы, которые представляют цвета в 4-битах (4444), 5-битах (555), 5- или 6-битах (565) или 10-битах (101010). |
| Форматы, использующие цветовое пространство YUV. |
Ваш адаптер getFrameType() функция должна возвращать соответствующий тип кадра, описывающий данные, возвращаемые устройством для указанного формата.
Если устройство поддерживает несколько цветовых форматов, нет необходимости предоставлять все форматы пользователям панели инструментов. Вы можете просто предоставить один цветовой формат и обработать низкоуровневые детали в вашем адаптере с FRAMETYPE.
В следующем примере показана скелетная реализация getFrameType() функция. Фактическая реализация может выбирать тип кадра на основе выбранного пользователем формата.
virtual imaqkit::frametypes::FRAMETYPE getFrameType() const {
return imaqkit::frametypes::FRAMETYPE:MONO8;
}
Комплект адаптера IAdaptorFrame класс определяет множество FRAMETYPE перечисления, которые охватывают множество возможных типов устройств данных изображения, могут возвращаться. Например, некоторые устройства могут возвращать цветные изображения в упакованном или неупакованном (плоском) формате. Эти форматы описывают расположение байтов красных, зеленых и синих данных в памяти. В упакованных форматах красные, зеленые и синие тройни группируются вместе. В неупакованных форматах все красные данные сохраняются вместе, за ними следуют все зеленые данные, за которыми следуют все синие данные. На следующем рисунке показано это различие.
Упакованные и плоские форматы

Для получения дополнительной информации о видеоформатах перейдите по ссылке fourcc.org Веб-сайт.