WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 | 3 | 4 | 5 |
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ МГУПИ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПРИБОРОСТРОЕНИЯ И ИНФОРМАТИКИ В.М.Баканов Программирование мультимедиа-систем Учебно-методическое пособие по выполнению лабораторных работ Москва 2008 УДК 681.3 Рекомендовано к изданию в качестве учебно-методического пособия редакционно-издательским советом МГУПИ Рецензенты:

проф. А.В.Рощин, доц. И.В.Степанова Баканов В.М.

Программирование мультимедиа-систем: учебно-методическое пособие по выполнению лабораторных работ. —M.: МГУПИ, 2008. –47 c.

В данном учебно-методическом пособии представлены лабораторные работы по учебной дисциплине “Программирование мультимедиа-систем”.

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

В данной работе рассматриваются в основном мультимедиа-системы на основе IBM PC-совместимых ПЭВМ и операционной системы (ОС) Windows, однако основные положения верны и для ЭВМ общего класса.

В лабораторных работах рассматривается практика работы со штатным программным обеспечением (ПО) и основы разработки оригинального ПО для создания и обработки мультимедиа-данных. При разработке оригинального ПО предполагается использование систем быстрой разработки приложений (RAD – Rapid Application Design) Delphi и C++Builder фирмы Borland Int. в среде ОС Windows, при этом знание основ программирования на языках Pascal и C/C++ априори предполагается. Для каждой из работ описываются соответствующие возможности компонент систем Delphi / C++Builder.

© В.М.Баканов, 2008 © МГУПИ, 2008 - 2 - Содержание Cтр.

Введение.........................................................................................……….

1. Лабораторная работа 1. Создание простых программ для ви- зуализации файлов изображений и видео……………………………….

2. Лабораторная работа 2. Принципы создания ПО для обработки изображений…………………………………….……………………...

3. Лабораторная работа 3. Цифровая запись, редактирование и воспроизведения звука…………………………………………………… 4. Лабораторная работа 4. Получение и цифровая обработка фо- тоизображений …………………………………………………………… 5. Лабораторная работа 5. Получение и цифровая обработка ви- деоданных………………………………………………………………….

6. Лабораторная работа 6. Создание видеофильмов……………….

Список литературы..............................…………………………………...

- 3 - Введение Мультимедиа-системы (ММС) суть системы обработки и представления мультимедиа-данных (ММД) и имеют два аспекта - аппаратный и программный. В данной работе рассматривается последний, причем как на пользовательском (приемы создания и обработки ММД с помощью ПО сторонних разработчиков) уровне, так и на уровне программиста (технологии программной реализации стандартных функций обработки ММД). Программирование в основном ориентировано на ОС Windows, переход на UNIXподобные ОС облегчен использованием сред программирования Borland Kulix.

Усвоенные приемы разработки ПО реально полезны при создании программ обработки данных картографии, аэро- и космической съемки, системах автоматизированного проектирования, подготовке к распознавания образов (поиск и выделение границ) и др. При реальном программировании используется система C++Builder фирмы Borland Int., причем полученные навыки ценны при переходе на Delphi (в обоих системах разработки приложений совпадают имена объектов и компонентных функций, разница заключается лишь в синтаксисе языков программирования); при этом переход на Borland Kulix (для ОС Linux) максимально облегчен. Особое внимание обращено на особенности программирования (включая типовые ошибки) графических приложений и пути повышения производительности (что необходимо для создания профессиональных приложений).

При работе со звуковыми и видеоданными использованы известные (распространенные) пакеты сторонних разработчиков, хорошо зарекомендовавшие себя в практической работе.

- 4 - 1 Лабораторная работа 1. Создание простых программ для визуализации файлов изображений и видео 1.1 Цель работы – приобретение практических навыков в создании ПО (‘вьюверов’) для просмотра (визуализации) растровых изображений и аудиовидеофайлов с использованием систем быстрой разработки приложений Delphi и C++Builder фирмы Borland Int. в среде ОС Windows [1,3].

1.2 Теоретические основы. Любые видеоданные в конечном счете представляют собой последовательность блоков информации о каждой точке изображения (пикселов, pixels - picture element); сжатие информации (без потери качества или с некоторой потерей оного) необходимо лишь для уменьшения объема дискового пространства, необходимого для сохранения соответствующего файла. При этом каждый раз при считывании файла происходит декомпрессия файла, при сохранении – повторная компрессия (согласно заданной технологии сжатия).

В системах Delphi/C++Builder определен компонент TImage (страница Additional палитры компонентов), предназначенный для визуализации изображений в виде битовой карты (TBitmap), метафайла (TMetafile) или ‘иконки’ (TIcon); JPEG-изображения могут быть обработаны с помощью специального (дополнительного) компонента Delphi/C++Builder.

Загрузка файла изображения в Image1 осуществляется соответствующими компонентными функциями (дополнительно используются компоненты OpenPictureDialog и SavePictureDialog):



if (OpenPictureDialog1->Execute()) Image1->Picture->LoadFromFile(“имя_файла”);

сохранение if (SavePictureDialog1->Execute()) Image1->Picture->SaveToFile(“имя_файла”);

Размер (в пикселах) области визуализации (полотна) определяется как int nX=Image1->Width;

int nY=Image1->Height;

Размер загруженного в Image изображения:

int pX=Image1->Picture->Width;

int pY=Image1->Picture->Height;

- 5 - В целях визуализации изображения при его размерах, значительно превышающих размеры окна, компонент Image помещен в контейнер ScrollBox (причем свойство Align последнего установлено в alClient); этим достигается скроллинг окна показа изображения относительно окна программы.

Режим масштабирования (с показом загруженного изображения во весь размер полотна) включается переводом булева свойства полотна в true (соответственно и обратное действие):

Image1->Stretch = ! (Image1->Stretch);

Однако при этом (если отношение горизонтального и вертикального размеров изображения не совпадает с таковым полотна) изображение будет искажено (исказятся пропорции). Для сохранения пропорций (заметим, что большинство современных дисплеев используют ‘квадратные’ пикселы, т.е.

AspectRatio=1) необходимо соответствующим образом изменять размер полотна; в модуле Main.cpp (проект View.bpr) описаны функции MakeScale (масштабировать с сохранением пропорций, выполняется при загрузке файла изображения) и ClearScale (вернуть режим визуализации без масштабирования). Соответственно функция MakeScale должны быть вызвана всякий раз при изменении размеров окна программы визуализации (реакция на событие OnResize), рис.1.1.

Рисунок 1.1 — Вид окна программы View.exe визуализации файлов изображений - 6 - Для работы с аудиовидеофайлами в системе Delphi/C++Builder используется компонент MediaPlayer (‘проигрыватель’), представляющий интерфейс к мультимедийным возможностям Windows посредством MCI (Media Control Interface) - совместимых драйверов; причем большинство методов компонента MediaPlayer реализованы как вызовы стандартной функции mciSendCommand с соответствующими параметрами [3]. MediaPlayer может управлять приводами CD-ROM, MIDI-секвенсорами и рядом других уcтройств. Типы обрабатываемых (проигрываемых) файлов – MID, RMI, WAV, MP3, AVI, MPG (MPEG-1 поддерживаются в штатной инсталляции Windows, MPEG-2 – нет).

Проигрыватель визуализируется в виде линейки управления (набор кнопок, часть или все из которых могут быть сделаны невидимыми путем настройки свойства VisibleButtons в ObjectInspector’е или во время RunTime), см. рис.1.2.

Рисунок 2.1 — Вид окна программы Play.exe проигрывания аудиовидеофайлов Стандартная загрузка аудиовидеофайла для обработки компонентом MediaPlayer осуществляется следующимм образом:

… MediaPlayer1->Close(); // сначала закрыть проигрыватель - 7 - if (OpenDialog1->Execute()) { MediaPlayer1->FileName = OpenDialog1->FileName;

MediaPlayer1->Open(); // открыть проигрыватель } Начать проигрывание можно нажатием левой кнопки линейки управления (или вызовом MediaPlayer1Play() при RunTime); при установке свойства AutoOpen в true проигрывание начинается сразу (нажатия кнопки или вызова метода Play не требуется). В случае DeviceType = dtAutoSelect проигрыватель самостоятельно определит тип устройства по расширению загруженного для проигрывания файла. При RunTime - управлении проигрывателем используются компонентные методы Play, Pause, Stop, Next, Prev, Step, StartRecording и Eject, соответствующие (слева направо) кнопкам линейки управления.

Область показа видео задается присвоением свойству Display проигрывателя имени компонента, в область которого осуществляется вывод видео:

MediaPlayer1->Display = Panel1; // показывать на PanelИмеется возможность явного определения размера области вывода видео (что важно, например, для реализации режима показа в полноэкранном режиме):

MediaPlayer1->DisplayRect = Rect(2,2, Panel1->Width-1,Panel1->Height-1); // задать размеры видеоэкрана Большинство из описанных возможной реализовано в тексте файла Main.cpp проекта Play.bpr; о дополнительных возможностях проигрывателя MediaPlayer см. [2,5], систему контекстной помощи Delphi/C++Builder и др.

1.3 Необходимое оборудование – IBM PC-совместимая ЭВМ, предустановленная ОС Windows, пакет C++Builder версии выше 4; заготовки проектов View.bpr и Play.bpr (могут быть получены как http://pilger.mgapi.ru/metods/mm_src.zip).

1.4 Порядок проведения работы. Студент знакомится с общими сведениями по практике программирования визуализаторов файлов изображений и видео (уровень усвоения проверяется с использованием вопросов для самопроверки), рассматривает заготовки проектов, добивается корректного функционирования программы, по требованию преподавателя выполняет расширяющую возможности программы модификацию конкретные задания.

- 8 - Возможные задания по модификации программ:

• Расширить функциональность программы просмотра файлов изображений возможностью задания произвольного масштаба (согласно линейке 500, 300, 200, 100, 75, 50, 25, 10% относительно размера изображения в файле).

• Создать проигрыватель двух мультимедиа-файлов одновременно, использующий один комплект кнопок управления.

• Снабдить проигрыватель шкалой управления, отражающей текущее положение в проигрываемом файле и имеющей возможность управлять позицией проигрывания.

• Реализовать возможность убыстренного и замедленного проигрывания мультимедиа-файла (линейка 2, 1.5, 1.0, 0.75, 0.5 относительно единичной скорости).





1.5 Оформление отчета по работе. Содержимое отчета должно отражать результаты самостоятельной работы над проектом (особенности предлагаемой программной реализации и предложения по расширению функциональности), по требованию преподавателя приводятся твердые копии (распечатки) внешнего вида интерфейса пользователя и выдачи программ. Фиксация имеющихся в заготовках проекта ошибок и (особенно) возможностей оптимизации кода весьма приветствуются.

1.6 Вопросы для самопроверки.

• Какие высокоуровневые компоненты Delphi/С++Builder применяются в программах мультимедиа и какова их функциональность • По каким причинам компонент типа TImage в стандартной поставке не может быть использован при работе с изображениями в формате JPEG • Чем отличается масштабирование с сохранением пропорций изображения от использования свойства Stretch Каким приемом достигается скроллирование изображения большого размера • Каким путем возможно достичь неизменности режима вписывания изображения в окно при изменении (вплоть до ‘растягивания’ во весь экран дисплея) размеров окна программы • Какими программными средствами может быть реализован показ видеофайлов во весь экран дисплея - 9 - 2 Лабораторная работа 2. Принципы создания ПО для обработки изображений 2.1 Цель работы – приобретение практических навыков в создании ПО для обработки изображений в виде двумерной растровой однослойной графики с использованием систем быстрой разработки приложений Delphi и C++Builder фирмы Borland Int.

2.2 Теоретические основы.. При наличии в составе языка программирования средств доступа к информации о каждом пикселе (обычно интенсивность каждой из трех составляющих цвета) не представляет труда реализовать практически любую обработку видеоизображения. Несмотря на это, разработка профессиональных приложений (уровня PhotoShop, www.adobe.com, PaintShop, www.jasc.com и т.п.), включающих сотни самых разнообразных видеоэффектов, тем не менее требует серьезной работы коллектива программистов. Т.к. необходимо последовательно проводить преобразования многих тысяч пикселов, для достижения приемлемой производительности часть программного кода создается с использованием ассемблера. Заметим, что зачастую при пиксельных преобразованиях конечный результат получается независимо от других; это позволяет эффективно распараллеливать процесс вычислений.

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

векторная графика (типичный представитель – пакет CorelDraw, www.adobe.com) в целом проще и полученные с ее помощью изображения легко конвертируются в растр (обратное утверждение неверно).

Доступ к контексту дисплея в GDI (Graphic Device Interface) Windows API реализуется посредством свойства Canvas (полотно) компонента TImage. Для копирования цвета (32-х битовое целое в Windows) из пиксела iX,iY (правая нижняя декартова система координат) в переменную iColor применяется следующий код (аналогично происходит обратное копирование):

long int iColor; // код цвета (32 бита) … iColor=Image1->Canvas->Pixels[iX][iY];

Размер (в пикселах) области визуализации определяется как:

- 10 - int nX=Image1->Width;

int nY=Image1->Height;

Размер загруженного в Image изображения:

int pX=Image1->Picture->Width;

int pY=Image1->Picture->Height;

Типовой прием изменения цвета массива пикселов заключается в организации циклов по координатам:

for (int iX=100; iX<=300; iX++) // цикл по оси абсцисс for (int iY=200; iY<=400; iY++) // цикл по оси ординат if (Image1->Canvas->Pixels[iX][iY]==clRed) // если цвет пиксела красный...

Image1->Canvas->Pixels[iX][iY]=clBlue; // cделать его синим! Заметим, что приведенный выше код недостаточно эффективен по скорости выполнения (реально вызываются Windows API функции GetPixel и SetPixel, выполняющиеся достаточно медленно) и область его применения ограничена несложными демонстрационными примерами; профессиональный подход заключается в реализации соответствующего кода на ассемблере (с последующей ручной оптимизацией, использовании инструкций MMX и SSE [2]) и работе с расположенной в оперативной памяти (ОП) копией массива пикселов (изображение при этом визуализируется только после полной его обработки). Эффективные решения могут быть достигнуты при использовании возможностей разработанной Microsoft Corp. библиотеки DirectX (примеры C-программирования с использованием компонентов DirectDraw, DirectSound, DirectMusic, DirectInput и DirectPlay этой библиотеки приведены в [1,3]).

При работе на Delphi/C++Builder’е более профессиональным является создание внеэкранного битового образа (часто с помощью компонента типа TBitmap, в дальнейших примерах используется TImage), обработка его в ОП и 'сброс' оного на экран (режим копирования CopyMode=cmSrcCopy) с помощью метода Draw [3]. Ниже приведен один из (примитивных) примеров использования внеэкранного образа (объект tmpImage):

Pages:     || 2 | 3 | 4 | 5 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.